fid 0.1.7

FID (Fully Indexable Dictionary) implementation for Rust
Documentation
#![allow(clippy::unreadable_literal)]

extern crate fid;
extern crate rand;

use fid::BitVector;
use rand::{Rng, SeedableRng, StdRng};

fn generate_random_vector(n: usize, p: f64) -> BitVector {
    let mut rng: StdRng = SeedableRng::from_seed([0; 32]);
    let mut bv = BitVector::new();
    for _ in 0..n {
        let b = rng.gen_bool(p);
        bv.push(b);
    }
    bv
}

fn main() {
    let test_cases = &[
        (1000000, 0.99),
        (1000000, 0.5),
        (1000000, 0.01),
        (100000000, 0.99),
        (100000000, 0.5),
        (100000000, 0.01),
    ];

    println!("n: # of nodes, p: density of 1s\n");

    for &(n, p) in test_cases {
        let bv = generate_random_vector(n, p);
        let size = bv.size();
        let rate = (size * 8) as f64 / n as f64;
        println!(
            "n = {}, p = {}: {} bytes ({} bit / orig bit)",
            n, p, size, rate
        );
    }
}