pef 0.1.3

Partioned Elias-Fano encoding for sorted integers
Documentation
mod bits;
mod elias_fano;
mod errors;

pub use elias_fano::*;
pub use errors::*;

#[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");
    }
}