use super::*;
#[test]
fn test_u64_type() {
let _result: u64 = gen_range(0..=(u64::MAX as u64), fast_u64);
}
#[test]
fn test_u32_type() {
let _result: u32 = gen_range(0..=(u32::MAX as u64), fast_u64);
}
#[test]
fn test_u16_type() {
let _result: u16 = gen_range(0..=(u16::MAX as u64), fast_u64);
}
#[test]
fn test_u8_type() {
let _result: u8 = gen_range(0..=(u8::MAX as u64), fast_u64);
}
#[test]
#[should_panic(expected = "Conversion failed:")]
fn test_u32_type_overflow() {
let start: u64 = (u32::MAX as u64) + 1;
let _result: u32 = gen_range(start..=u64::MAX, fast_u64);
}
#[test]
#[should_panic(expected = "Conversion failed:")]
fn test_u16_type_overflow() {
let start: u64 = (u16::MAX as u64) + 1;
let _result: u16 = gen_range(start..=u64::MAX, fast_u64);
}
#[test]
#[should_panic(expected = "Conversion failed:")]
fn test_u8_type_overflow() {
let start: u64 = (u8::MAX as u64) + 1;
let _result: u8 = gen_range(start..=u64::MAX, fast_u64);
}
#[test]
fn test_top_u64_value() {
let _result: u64 = gen_range(u64::MAX..=u64::MAX, fast_u64);
}
#[test]
fn test_maximum_range() {
let _result: u64 = gen_range(0..=u64::MAX, fast_u64);
let _result: u64 = gen_range(0..u64::MAX, fast_u64);
}
#[test]
fn test_single_value_range() {
let result: u64 = gen_range(5..=5, fast_u64);
assert_eq!(result, 5u64, "Single-value range should always return 5");
}
#[test]
fn test_small_range() {
let result: u64 = gen_range(10..=11, fast_u64);
assert!(
matches!(result, 10u64 | 11u64),
"Result should be either 10 or 11"
);
}
#[test]
fn test_near_u64_max() {
let start: u64 = u64::MAX - 5;
let result: u64 = gen_range(start..=u64::MAX, fast_u64);
assert!(
(start..=u64::MAX).contains(&result),
"Value should be within {}..={}",
start,
u64::MAX
);
}
#[test]
#[should_panic]
fn test_empty_range_exclusive() {
let _result: u64 = gen_range(5..5, fast_u64);
}
#[test]
fn test_large_inclusive_range() {
let result: u64 = gen_range(0..=u64::MAX, fast_u64);
assert!(
(0..=u64::MAX).contains(&result),
"Generated value should be within 0..=u64::MAX"
);
}
#[test]
fn test_gen_range_state_changes_reference_passed() {
let mut counter = 0u64;
let mut rng_closure = move || {
counter += 100;
counter
};
let range = 0u64..=1000000;
let val1: u64 = crate::gen_range(range.clone(), &mut rng_closure);
let val2: u64 = crate::gen_range(range.clone(), &mut rng_closure);
let val3: u64 = crate::gen_range(range.clone(), &mut rng_closure);
assert!(val1 < val2 && val2 < val3,
"Expected RNG state to change across calls, but got: {} -> {} -> {}",
val1, val2, val3
);
println!("Test successful. RNG closure mutated across calls.");
}
#[test]
fn test_gen_range_state_changes_value_passed() {
let mut counter = 0u64;
let rng_closure = move || {
counter += 100;
counter
};
let range = 0u64..=1000000;
let val1: u64 = crate::gen_range(range.clone(), rng_closure);
let val2: u64 = crate::gen_range(range.clone(), rng_closure);
let val3: u64 = crate::gen_range(range.clone(), rng_closure);
assert!(val1 == val2 && val2 == val3,
"Expected RNG state to did not changed across calls, but got: {} -> {} -> {}",
val1, val2, val3
);
}