use criterion::{black_box, criterion_group, criterion_main, Criterion}; use hotsauce::Regex; fn check(pat: &str, hay: &str) { let regex = Regex::new(pat).unwrap(); for mat in regex.matches(black_box(hay).bytes()) { black_box(mat); } } fn benchmark(c: &mut Criterion) { let mut g = c.benchmark_group("find text"); g.sample_size(500); g.bench_function("pat at start", |b| b.iter(|| check("hey", "hey"))); let late = format!("{}hey", " ".repeat(100_000)); g.bench_function("pat after 100_000", |b| b.iter(|| check("hey", &late))); let overlap = format!("{}hey", "h".repeat(100_000)); g.bench_function("pat after 100_000 start of pat", |b| { b.iter(|| check("hey", &overlap)) }); g.bench_function("find longest pat from start", |b| { b.iter(|| check("h+ey", &overlap)) }); g.finish(); } criterion_group!(benches, benchmark); criterion_main!(benches);