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();
}
}