use core::ops::RangeBounds;
use fastrand::Rng;
use crate::W4RefCell;
static GLOBAL_RNG: W4RefCell<Option<Rng>> = W4RefCell::new(None);
fn initialize() {
    *GLOBAL_RNG.borrow_mut() = Some(Rng::with_seed(123456789));
}
fn ensure_initialized() {
    if GLOBAL_RNG.borrow().is_none() {
        initialize();
    }
}
pub fn rand_u8(range: impl RangeBounds<u8>) -> u8 {
    ensure_initialized();
    GLOBAL_RNG.borrow_mut().as_mut().unwrap().u8(range)
}
pub fn rand_i32(range: impl RangeBounds<i32>) -> i32 {
    ensure_initialized();
    GLOBAL_RNG.borrow_mut().as_mut().unwrap().i32(range)
}
pub fn rand_f64() -> f64 {
    ensure_initialized();
    GLOBAL_RNG.borrow_mut().as_mut().unwrap().f64()
}
pub fn rand_reseed(seed: u64) {
    ensure_initialized();
    GLOBAL_RNG.borrow_mut().as_mut().unwrap().seed(seed)
}