/// XorShiftRng pub struct DeterministicRng { count: usize, x: u32, y: u32, z: u32, w: u32, } impl DeterministicRng { pub fn new() -> Self { DeterministicRng { count: 0, x: 0x193a6754, y: 0xa8a7d469, z: 0x97830e05, w: 0x113ba7bb } } /// Guarantees that each returned number is unique. pub fn next(&mut self) -> u32 { self.count += 1; assert!(self.count <= 70029); let x = self.x; let t = x ^ (x << 11); self.x = self.y; self.y = self.z; self.z = self.w; let w_ = self.w; self.w = w_ ^ (w_ >> 19) ^ (t ^ (t >> 8)); self.w } }