2020-09-14 18:29:36 +00:00
|
|
|
//! Helper function for random number generator
|
|
|
|
//!
|
|
|
|
use rand::prelude::*;
|
|
|
|
|
|
|
|
|
2020-09-14 18:36:07 +00:00
|
|
|
/// Generate random number between start (inclusive) and end (exclusive).
|
2020-09-14 18:29:36 +00:00
|
|
|
pub fn random_range(rng: &mut StdRng, start: usize, end: usize) -> usize {
|
2020-09-14 18:36:07 +00:00
|
|
|
let max = (end - start) as u32;
|
2020-09-14 18:29:36 +00:00
|
|
|
((rng.next_u32() % max) + start as u32) as usize
|
|
|
|
}
|
|
|
|
|
|
|
|
/// ------------------------------------------------------------------------------------------------
|
|
|
|
/// Module unit tests
|
|
|
|
/// ------------------------------------------------------------------------------------------------
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use std::time::{SystemTime, UNIX_EPOCH};
|
|
|
|
use rand::prelude::*;
|
|
|
|
use super::*;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_range() {
|
|
|
|
let system_time = SystemTime::now().duration_since(UNIX_EPOCH).expect("Can't access system time");
|
|
|
|
let mut rng = StdRng::seed_from_u64(system_time.as_millis() as u64);
|
|
|
|
let x = random_range(&mut rng, 5, 8);
|
2020-09-14 18:36:07 +00:00
|
|
|
assert!(x >= 5 && x < 8);
|
2020-09-14 18:29:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|