easyrand/
lib.rs

1extern crate rand;
2
3use rand::seq::SliceRandom;
4use rand::Rng;
5use rand::SeedableRng;
6
7/// Returns a random numnber between 0.0 and 1.0
8pub fn random() -> f64 {
9    rand::random::<f64>()
10}
11
12/// Returns a random number in the specified range
13pub fn randrange(min: f64, max: f64) -> f64 {
14    rand::thread_rng().gen_range(min..max)
15}
16
17/// Returns a random integer in the specified range
18pub fn randint(min: i64, max: i64) -> i64 {
19    rand::thread_rng().gen_range(min..max)
20}
21
22// True or false
23pub fn randbool() -> bool {
24    rand::thread_rng().gen()
25}
26
27/// In-place shuffle of the given object
28pub fn shuffle<T>(obj: &mut Vec<T>) {
29    let mut rng = rand::thread_rng();
30    obj.shuffle(&mut rng);
31}
32
33/// Return a reference to a randomly selected item in the given object
34pub fn choose<T>(obj: &Vec<T>) -> Option<&T> {
35    let mut rng = rand::thread_rng();
36    obj.choose(&mut rng)
37}
38
39/// Convinence method to get seedable
40pub fn with_seed(seed: u64) -> SeededRand {
41    SeededRand::new(seed)
42}
43
44pub struct SeededRand {
45    rng: rand::rngs::StdRng,
46}
47
48/// Creates predictible random numbers using a given seed value
49impl SeededRand {
50    pub fn new(seed: u64) -> Self {
51        SeededRand {
52            rng: rand::rngs::StdRng::seed_from_u64(seed),
53        }
54    }
55
56    /// Returns a random numnber between 0.0 and 1.0
57    pub fn random(&mut self) -> f64 {
58        self.rng.gen()
59    }
60
61    /// Returns a random number in the specified range
62    pub fn randrange(&mut self, min: f64, max: f64) -> f64 {
63        self.rng.gen_range(min..max)
64    }
65
66    // True or false
67    pub fn randbool(&mut self) -> bool {
68        self.rng.gen()
69    }
70
71    /// Returns a random integer in the specified range
72    pub fn randint(&mut self, min: i64, max: i64) -> i64 {
73        self.rng.gen_range(min..max)
74    }
75
76    /// In-place shuffle of the given object
77    pub fn shuffle<T>(&mut self, obj: &mut Vec<T>) {
78        obj.shuffle(&mut self.rng);
79    }
80
81    /// Return a reference to a randomly selected item in the given object
82    pub fn choose<'a, T>(&mut self, obj: &'a Vec<T>) -> Option<&'a T> {
83        obj.choose(&mut self.rng)
84    }
85}