criterion/stats/
rand_util.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use oorandom::Rand64;
use std::cell::RefCell;
use std::time::{SystemTime, UNIX_EPOCH};

pub type Rng = Rand64;

thread_local! {
    static SEED_RAND: RefCell<Rand64> = RefCell::new(Rand64::new(
        SystemTime::now().duration_since(UNIX_EPOCH)
            .expect("Time went backwards")
            .as_millis()
    ));
}

pub fn new_rng() -> Rng {
    SEED_RAND.with(|r| {
        let mut r = r.borrow_mut();
        let seed = ((r.rand_u64() as u128) << 64) | (r.rand_u64() as u128);
        Rand64::new(seed)
    })
}