use bugu::CuckooFilter;
use std::collections::hash_map::DefaultHasher;
#[test]
fn false_positive_rate() {
let total_items = 1_000_000;
let mut filter = CuckooFilter::<DefaultHasher>::with_capacity(total_items);
let mut num_inserted: u64 = 0;
for i in 0..total_items {
match filter.add(&i) {
Ok(_) => num_inserted += 1,
Err(_) => break,
}
}
for i in 0..num_inserted {
assert!(filter.contains(&i));
}
let mut false_queries: u64 = 0;
for i in total_items..(2 * total_items) {
if filter.contains(&i) {
false_queries += 1;
}
}
let false_positive_rate = (false_queries as f64) / (total_items as f64);
println!("elements inserted: {}", num_inserted);
println!(
"memory usage: {:.2}KiB",
(filter.memory_usage() as f64) / 1024.0
);
println!("false positive rate: {}%", 100.0 * false_positive_rate);
assert!(false_positive_rate < 0.03);
}