1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
mod bits; mod elias_fano; mod errors; pub use elias_fano::*; #[cfg(test)] mod tests { use flate2::Compression; use std::io::Write; use crate::elias_fano::EliasFano; #[test] fn it_works() { let ids: Vec<usize> = (0..100).chain(1000..1023).chain(1060..1400).chain(20000..20001).collect(); let gzipped = { let ids: Vec<_> = ids.iter().flat_map(|i| (*i as u32).to_be_bytes()).collect(); let mut out = vec![]; let mut encoder = flate2::write::GzEncoder::new(&mut out, Compression::new(9)); encoder.write(ids.as_slice()).expect("wrote bytes"); encoder.finish().expect("finished"); out.len() }; let efed = { let ef = EliasFano::new(ids).expect("elias fano encoding"); ef.as_bytes().len() }; println!("ef={} gzip={}", efed, gzipped); assert!(efed < gzipped, "elias fano size is better"); } }