mod common;
use common::{keys, persisted_bytes, rng, BATCH, KEY_LENGTH};
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
use fst_incremental::IncrementalFstSet;
use std::hint::black_box;
fn bench_remove_single(c: &mut Criterion) {
let mut group = c.benchmark_group("RemoveSingle");
let mut r = rng(0);
for size in [1_000usize, 10_000, 100_000] {
let base_keys = keys(&mut r, size, KEY_LENGTH);
let base = persisted_bytes(&base_keys);
let victims: Vec<Vec<u8>> = base_keys.iter().take(BATCH).cloned().collect();
group.throughput(Throughput::Elements(victims.len() as u64));
group.bench_with_input(BenchmarkId::new("FromPersisted", size), &size, |b, _| {
b.iter_batched(
|| common::from_bytes(&base),
|set| {
for key in &victims {
black_box(set.remove(key).unwrap());
}
},
criterion::BatchSize::SmallInput,
);
});
group.bench_with_input(BenchmarkId::new("FromAddBuffer", size), &size, |b, _| {
b.iter_batched(
|| {
let set = IncrementalFstSet::new(Some(common::no_rebuild())).unwrap();
set.bulk_insert(victims.clone()).unwrap();
set
},
|set| {
for key in &victims {
black_box(set.remove(key).unwrap());
}
},
criterion::BatchSize::SmallInput,
);
});
}
group.finish();
}
criterion_group!(benches, bench_remove_single);
criterion_main!(benches);