rand.rs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. use rand::{Rng, SeedableRng};
  2. pub trait MatzoRand {
  3. fn gen_range_i64(&mut self, min: i64, max: i64) -> i64;
  4. fn gen_range_usize(&mut self, min: usize, max: usize) -> usize;
  5. }
  6. pub struct DefaultRNG {
  7. rand: rand::rngs::ThreadRng,
  8. }
  9. impl DefaultRNG {
  10. pub fn new() -> DefaultRNG {
  11. DefaultRNG {
  12. rand: rand::thread_rng(),
  13. }
  14. }
  15. }
  16. impl Default for DefaultRNG {
  17. fn default() -> DefaultRNG {
  18. Self::new()
  19. }
  20. }
  21. impl MatzoRand for DefaultRNG {
  22. fn gen_range_i64(&mut self, min: i64, max: i64) -> i64 {
  23. self.rand.gen_range(min..max)
  24. }
  25. fn gen_range_usize(&mut self, min: usize, max: usize) -> usize {
  26. self.rand.gen_range(min..max)
  27. }
  28. }
  29. pub struct SeededRNG {
  30. rand: rand::rngs::StdRng,
  31. }
  32. impl SeededRNG {
  33. pub fn from_seed(seed: u64) -> SeededRNG {
  34. SeededRNG {
  35. rand: rand::rngs::StdRng::seed_from_u64(seed),
  36. }
  37. }
  38. }
  39. impl MatzoRand for SeededRNG {
  40. fn gen_range_i64(&mut self, min: i64, max: i64) -> i64 {
  41. self.rand.gen_range(min..max)
  42. }
  43. fn gen_range_usize(&mut self, min: usize, max: usize) -> usize {
  44. self.rand.gen_range(min..max)
  45. }
  46. }