#![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 = 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 = 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);