use crate::NHSNumber;
use rand::RngExt;
use std::ops::RangeInclusive;
use std::sync::LazyLock;
#[allow(dead_code)]
pub static TESTABLE_MIN: LazyLock<NHSNumber> = LazyLock::new(|| NHSNumber {
digits: [9, 9, 9, 0, 0, 0, 0, 0, 0, 0],
});
#[allow(dead_code)]
pub static TESTABLE_MAX: LazyLock<NHSNumber> = LazyLock::new(|| NHSNumber {
digits: [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
});
#[allow(dead_code)]
pub static TESTABLE_RANGE_INCLUSIVE: LazyLock<RangeInclusive<NHSNumber>> =
LazyLock::new(|| RangeInclusive::new(*TESTABLE_MIN, *TESTABLE_MAX));
#[allow(dead_code)]
pub fn testable_random_sample() -> NHSNumber {
let mut rng = rand::rng();
NHSNumber {
digits: [
9,
9,
9,
rng.random_range(0..=9) as i8,
rng.random_range(0..=9) as i8,
rng.random_range(0..=9) as i8,
rng.random_range(0..=9) as i8,
rng.random_range(0..=9) as i8,
rng.random_range(0..=9) as i8,
rng.random_range(0..=9) as i8,
],
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_random() {
let a = testable_random_sample();
assert!(a >= *TESTABLE_MIN);
assert!(a <= *TESTABLE_MAX);
}
}