cseq_benchmark 0.1.5

The program for benchmarking compact sequences and bitmaps
use succinct::{rank, select::{Select0Support, Select1Support}, BinSearchSelect, BitRankSupport, BitVecMut, BitVector, SpaceUsage};
use crate::{Conf, Tester};

pub fn build_bit_vec(conf: &Conf) -> (BitVector::<u64>, Tester) {
    let mut content = BitVector::with_fill(conf.universe as u64, false);
    let tester = conf.fill_data(|bit_nr, value| {content.set_bit(bit_nr as u64, value)});
    (content, tester)
}

fn benchmark(mut tester: super::Tester, method_name: &str, rank: impl BitRankSupport+SpaceUsage) {
    tester.rank_includes_current = true;
    tester.raport_rank(method_name, rank.total_bytes(),
        |index| rank.rank1(index as u64) as usize);
    println!(" select by binary search over ranks (no extra space overhead):");
    let select = BinSearchSelect::new(rank);
    tester.raport_select1(method_name, 0, |index| select.select1(index as u64).map(|v| v as usize));
    tester.raport_select0(method_name, 0, |index| select.select0(index as u64).map(|v| v as usize));
}

pub fn benchmark_rank9(conf: &super::Conf) {
    println!("succinct Rank9:");
    let (content, tester) = build_bit_vec(conf);
    benchmark(tester, "succinct Rank9", rank::Rank9::new(content));
}

pub fn benchmark_jacobson(conf: &super::Conf) {
    println!("succinct JacobsonRank:");
    let (content, tester) = build_bit_vec(conf);
    benchmark(tester, "succinct JacobsonRank", rank::JacobsonRank::new(content));
}