use netspd::engine::metrics::Sampler;
#[test]
fn sampler_min_and_max() {
let mut s = Sampler::new(10);
s.push(30.0);
s.push(10.0);
s.push(20.0);
assert_eq!(s.min(), Some(10.0));
assert_eq!(s.max(), Some(30.0));
}
#[test]
fn sampler_min_max_empty() {
let s = Sampler::new(10);
assert_eq!(s.min(), None);
assert_eq!(s.max(), None);
}
#[test]
fn sampler_min_max_single() {
let mut s = Sampler::new(10);
s.push(42.0);
assert_eq!(s.min(), Some(42.0));
assert_eq!(s.max(), Some(42.0));
}
#[test]
fn evenly_distributed_samples_fill_all_bins() {
let mut s = Sampler::new(20);
for i in 0..8u32 {
s.push(f64::from(i) * 10.0 + 5.0); }
assert_eq!(s.len(), 8);
let lo = s.min().unwrap_or(0.0);
let hi = s.max().unwrap_or(80.0);
assert!(lo < hi);
}
#[test]
fn all_identical_samples_produce_near_zero_spread() {
let mut s = Sampler::new(10);
for _ in 0..10 {
s.push(12.0);
}
let lo = s.min().unwrap_or(0.0);
let hi = s.max().unwrap_or(0.0);
assert!(hi - lo < 0.5);
}
#[test]
fn rolling_window_evicts_oldest() {
let mut s = Sampler::new(3);
s.push(1.0);
s.push(2.0);
s.push(3.0);
s.push(100.0); assert_eq!(s.min(), Some(2.0));
assert_eq!(s.len(), 3);
}