use bugu::{CuckooFilter, ExportedCuckooFilter};
use std::collections::hash_map::DefaultHasher;
#[test]
fn interoperability() {
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,
}
}
let store: ExportedCuckooFilter = filter.export();
let recovered_filter = CuckooFilter::<DefaultHasher>::from(store);
for i in 0..num_inserted {
assert!(filter.contains(&i));
assert!(recovered_filter.contains(&i));
}
for i in total_items..(2 * total_items) {
assert_eq!(filter.contains(&i), recovered_filter.contains(&i));
}
}
#[test]
#[cfg(feature = "serde")]
fn serialization() {
let mut filter = CuckooFilter::<DefaultHasher>::with_capacity(100);
for i in 0..50 {
filter.add(&i).unwrap();
}
let store: ExportedCuckooFilter = filter.export();
let saved_json = serde_json::to_string(&store).unwrap();
let restore_json: ExportedCuckooFilter =
serde_json::from_str(&saved_json).unwrap();
let recovered_filter = CuckooFilter::<DefaultHasher>::from(restore_json);
for i in 0..50 {
assert!(recovered_filter.contains(&i));
}
}