mod common;
use std::hint::black_box;
use criterion::{BatchSize, Criterion, Throughput, criterion_group, criterion_main};
use laurus::spelling::corrector::SpellingCorrector;
fn bench_spell_correction(c: &mut Criterion) {
let mut group = c.benchmark_group("spell_correction");
let misspellings = ["searc", "engin", "documnet", "qurey", "algortihm"];
let probe = SpellingCorrector::new().correct("searc");
assert!(
!probe.original.is_empty(),
"spelling probe must populate original query"
);
group.bench_function("correct_single_word", |b| {
b.iter_batched(
SpellingCorrector::new,
|mut corrector| {
let result = corrector.correct(black_box("searc"));
black_box(result);
},
BatchSize::PerIteration,
);
});
group.throughput(Throughput::Elements(misspellings.len() as u64));
group.bench_function("correct_batch_words", |b| {
b.iter_batched(
SpellingCorrector::new,
|mut corrector| {
for word in &misspellings {
let result = corrector.correct(black_box(word));
black_box(result);
}
},
BatchSize::PerIteration,
);
});
group.finish();
}
criterion_group!(benches, bench_spell_correction);
criterion_main!(benches);