use anyhow::Result;
use dsi_progress_logger::ProgressLogger;
use sux::bits::BitFieldVec;
use sux::dict::VFilter;
use sux::func::VFunc;
use sux::utils::FromCloneableIntoIterator;
fn main() -> Result<()> {
let n = 1_000_000;
let mut pl = ProgressLogger::default();
let filter = <VFilter<VFunc<usize, Box<[u8]>>>>::try_new(
FromCloneableIntoIterator::from(0..n),
n,
&mut pl,
)?;
for i in 0..n {
assert!(filter.contains(i));
}
assert!(filter[42]);
println!(
"Box<[u8]> filter: {} keys, {} hash bits",
filter.len(),
filter.hash_bits(),
);
let filter = <VFilter<VFunc<usize, BitFieldVec<Box<[usize]>>>>>::try_new(
FromCloneableIntoIterator::from(0..n),
n,
5, &mut pl,
)?;
for i in 0..n {
assert!(filter.contains(i));
}
println!(
"BitFieldVec filter: {} keys, {} hash bits",
filter.len(),
filter.hash_bits(),
);
Ok(())
}