fusefilter 0.1.0

No alloc membership approximation
#![feature(min_const_generics)]
#![feature(let_chains)]
#[macro_use]
extern crate criterion;
use criterion::{BenchmarkId, Criterion};
use fastrand;
use fusefilter::*;

pub fn fusefilter_new(c: &mut Criterion) {
    //const size: usize = 300000;
    const size: usize = 10;
    let mut group = c.benchmark_group("fusefilter_new");
    let group = group.sample_size(size);

    let keys = create_keys::<size>();

    group.bench_with_input(BenchmarkId::new("fusefilter_new", size), &keys, |b, keys| {
        b.iter(|| Fuse::<u8, size>::try_from(&*keys));
    });
}

pub fn fusefilter_contains(c: &mut Criterion) {
    //const size: usize = 300000;
    const size: usize = 10;
    let mut group = c.benchmark_group("fusefilter_contains");
    let group = group.sample_size(size);

    let mut keys = [0; size];
    for i in 0..size {
        keys[i] = fastrand::u64(..); 
    }

    let f: Fuse<u8, size> = Fuse::try_from(&keys);

    group.bench_function(BenchmarkId::new("fusefilter_contains", size), |b| {
        let key: u64 = fastrand::u64(..); 
        b.iter(|| f.contains(&key));
    });
}

fn create_keys<const N: usize>() -> [u64; N] {
    let mut keys = [0; N];
    for i in 0..N {
        keys[i] = fastrand::u64(..); 
    }
    keys
}

criterion_group!(fusefilter, fusefilter_new, fusefilter_contains);
criterion_main!(fusefilter);