#[cfg(test)]
mod tests {
use crate::*;
#[test]
fn test_rank_space_error() -> Result<()> {
let mut sketch = ReqSketch::new(); let n = 50_000;
for i in 0..n {
sketch.update(i as f64);
}
assert_eq!(sketch.total_n, n as u64, "Should have processed {} items", n);
let test_ranks = [0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99];
for &rank in &test_ranks {
let q_est = sketch.quantile(rank, SearchCriteria::Inclusive)?;
let est_rank = sketch.rank(&q_est, SearchCriteria::Inclusive)?;
let abs_rank_err = (est_rank - rank).abs();
let max_abs_rank_err = if rank >= 0.9 {
0.01 } else {
0.02 };
assert!(abs_rank_err <= max_abs_rank_err,
"HRA rank {} abs error {:.4} > {:.4} (est_rank: {:.6}, true_rank: {:.6})",
rank, abs_rank_err, max_abs_rank_err, est_rank, rank);
}
assert!(sketch.len() <= n as u64, "Should not retain more items than inserted");
assert!(sketch.compactors.len() > 0, "Should have at least one compactor");
Ok(())
}
}