use sbits::elias_fano::EliasFano;
fn main() {
let mut values: Vec<u64> = (0..1_000_000u64).step_by(1000).collect();
values.push(42);
values.push(7777);
values.push(999_999);
values.sort();
values.dedup();
let universe = 1_000_000;
let ef = EliasFano::new(&values, universe);
println!(
"Stored {} sorted values (universe 0..{})\n",
ef.len(),
ef.universe_size()
);
println!("First 5 values:");
for i in 0..5 {
println!(" ef[{}] = {}", i, ef.get(i).unwrap());
}
println!("\nSuccessor queries:");
for target in [43, 5000, 999_998] {
println!(" successor({}) = {:?}", target, ef.successor(target));
}
let raw_bytes = values.len() * std::mem::size_of::<u64>();
let ef_bytes = ef.heap_bytes();
let ratio = raw_bytes as f64 / ef_bytes as f64;
println!(
"\nSpace: {} bytes compressed vs {} bytes raw ({:.1}x smaller)",
ef_bytes, raw_bytes, ratio,
);
}