use std::path::PathBuf;
use api_debug_lab::cases::Case;
use api_debug_lab::rules::diagnose;
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
fn fixtures_root() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("fixtures")
}
fn bench_diagnose(c: &mut Criterion) {
let names = [
"auth_missing",
"bad_json_payload",
"rate_limited",
"webhook_signature_invalid",
"webhook_signature_invalid_stale",
"timeout_retry",
"config_dns_error",
];
let cases: Vec<(String, Case)> = names
.iter()
.map(|n| {
let case = Case::load(n, &fixtures_root()).expect("load fixture");
(n.to_string(), case)
})
.collect();
let mut group = c.benchmark_group("diagnose");
for (name, case) in &cases {
group.bench_with_input(BenchmarkId::from_parameter(name), case, |b, case| {
b.iter(|| {
let report = diagnose(black_box(case));
let _ = black_box(report);
});
});
}
group.finish();
}
criterion_group!(benches, bench_diagnose);
criterion_main!(benches);