use grovewright_core::rng::Rng; #[test] fn matches_the_splitmix64_reference_values() { let mut rng = Rng::new(0); assert_eq!(rng.next_u64(), 0xE220_A839_7B1D_CDAF); assert_eq!(rng.next_u64(), 0x6E78_9E6A_A1B9_65F4); assert_eq!(rng.next_u64(), 0x06C4_5D18_8009_454F); } #[test] fn the_same_seed_gives_the_same_sequence() { let mut a = Rng::new(2026); let mut b = Rng::new(2026); for _ in 0..1_000 { assert_eq!(a.next_u64(), b.next_u64()); } } #[test] fn different_seeds_give_different_sequences() { assert_ne!(Rng::new(1).next_u64(), Rng::new(2).next_u64()); } #[test] fn below_stays_inside_the_bound() { let mut rng = Rng::new(7); for bound in [1u32, 2, 3, 10, 100, 1_000_000, u32::MAX] { for _ in 0..1_000 { assert!(rng.below(bound) < bound); } } } #[test] fn below_reaches_every_value_of_a_small_bound() { let mut rng = Rng::new(99); let mut seen = [false; 6]; for _ in 0..1_000 { seen[rng.below(6) as usize] = true; } assert_eq!(seen, [true; 6]); } #[test] #[should_panic(expected = "bound must be greater than zero")] fn below_refuses_a_bound_of_zero() { Rng::new(1).below(0); }