bevy_simple_random 1.0.1

A crate for easily adding random number generation to Bevy.
Documentation
use crate::from_time::{random_from_time, time_seed};
use crate::rand_core::Rng;
use crate::*;
use bevy::prelude::*;
use rand_chacha::ChaChaRng;
use std::time::Duration;

#[test]
fn test_many_global() {
    let mut app = App::new();

    app.insert_resource(ChaChaGlobalRng::seed_from_u64(0));

    app.add_systems(Update, |mut rng: ResMut<ChaChaGlobalRng>| {
        for _ in 0..100 {
            rng.next_u32();
        }
    });

    app.update();
}

#[test]
fn test_many_local() {
    let mut app = App::new();

    for _ in 0..10 {
        app.world_mut().spawn(ChaChaEntityRng::seed_from_u64(0));
    }

    app.add_systems(
        Update,
        |mut random_entities: Query<&mut ChaChaEntityRng>| {
            for _ in 0..10 {
                let mut previous = None;
                for mut rng in random_entities.iter_mut() {
                    let value = rng.0.next_u32();
                    if let Some(previous_value) = previous {
                        assert_eq!(value, previous_value);
                    }
                    previous = Some(value);
                }
            }
        },
    );

    app.update();
}

#[test]
fn test_seed() {
    let seed1 = time_seed();
    std::thread::sleep(Duration::from_secs(1));
    let seed2 = time_seed();
    assert_ne!(seed1, seed2);
}

#[test]
fn test_from_time() {
    let mut rng = random_from_time::<ChaChaRng>();

    for _ in 0..10 {
        rng.next_u32();
    }
}