cs_utils/utils/random_number.rs
1use rand::distributions::uniform::{SampleRange, SampleUniform};
2use rand::{thread_rng, Rng};
3
4/// Generate a random number in `(min, max]` range.
5///
6/// ## Arguments
7///
8/// * `range` - `(min..max)` (or `(min..=max)`) range of numbers
9///
10/// ## Examples
11///
12/// ### Inclusive range
13/// ```
14/// let number = cs_utils::random_number(3..=9);
15///
16/// assert!(number >= 3);
17/// assert!(number <= 9);
18/// ```
19///
20/// ### Non-inclusive range
21/// ```
22/// let number = cs_utils::random_number(1..5);
23///
24/// assert!(number >= 1);
25/// assert!(number < 5);
26/// ```
27///
28pub fn random_number<T, R>(range: R) -> T where T: SampleUniform, R: SampleRange<T> {
29 let mut rng = thread_rng();
30 let result: T = rng.gen_range(range);
31
32 return result;
33}