1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- use rand::{Rng, SeedableRng};
- pub trait MatzoRand {
- fn gen_range_i64(&mut self, min: i64, max: i64) -> i64;
- fn gen_range_usize(&mut self, min: usize, max: usize) -> usize;
- }
- pub struct DefaultRNG {
- rand: rand::rngs::ThreadRng,
- }
- impl DefaultRNG {
- pub fn new() -> DefaultRNG {
- DefaultRNG {
- rand: rand::thread_rng(),
- }
- }
- }
- impl Default for DefaultRNG {
- fn default() -> DefaultRNG {
- Self::new()
- }
- }
- impl MatzoRand for DefaultRNG {
- fn gen_range_i64(&mut self, min: i64, max: i64) -> i64 {
- self.rand.gen_range(min..max)
- }
- fn gen_range_usize(&mut self, min: usize, max: usize) -> usize {
- self.rand.gen_range(min..max)
- }
- }
- pub struct SeededRNG {
- rand: rand::rngs::StdRng,
- }
- impl SeededRNG {
- pub fn from_seed(seed: u64) -> SeededRNG {
- SeededRNG {
- rand: rand::rngs::StdRng::seed_from_u64(seed),
- }
- }
- }
- impl MatzoRand for SeededRNG {
- fn gen_range_i64(&mut self, min: i64, max: i64) -> i64 {
- self.rand.gen_range(min..max)
- }
- fn gen_range_usize(&mut self, min: usize, max: usize) -> usize {
- self.rand.gen_range(min..max)
- }
- }
|