use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
use std::hint::black_box;
use test_lang::Snapshot;
fn make_lines(n: usize) -> Vec<String> {
(0..n).map(|i| format!("Token({i})")).collect()
}
fn bench_capture(c: &mut Criterion) {
let mut group = c.benchmark_group("capture");
for &n in &[16usize, 256, 4096] {
let lines = make_lines(n);
group.bench_with_input(BenchmarkId::from_parameter(n), &lines, |b, lines| {
b.iter(|| Snapshot::per_line(black_box(lines)));
});
}
group.finish();
}
fn bench_check_match(c: &mut Criterion) {
let mut group = c.benchmark_group("check_match");
for &n in &[16usize, 256, 4096] {
let lines = make_lines(n);
let snapshot = Snapshot::per_line(&lines);
let expected = lines.join("\n");
group.bench_with_input(BenchmarkId::from_parameter(n), &expected, |b, expected| {
b.iter(|| snapshot.check(black_box(expected)).is_ok());
});
}
group.finish();
}
fn bench_check_mismatch(c: &mut Criterion) {
let mut group = c.benchmark_group("check_mismatch");
for &n in &[16usize, 256, 4096] {
let lines = make_lines(n);
let snapshot = Snapshot::per_line(&lines);
let mut expected_lines = lines.clone();
expected_lines[n / 2] = String::from("Token(CHANGED)");
let expected = expected_lines.join("\n");
group.bench_with_input(BenchmarkId::from_parameter(n), &expected, |b, expected| {
b.iter(|| snapshot.check(black_box(expected)).is_err());
});
}
group.finish();
}
criterion_group!(
benches,
bench_capture,
bench_check_match,
bench_check_mismatch
);
criterion_main!(benches);