use std::fs::File; use std::io::Read; use aoc_2022::get_implementation; use criterion::criterion_group; use criterion::criterion_main; use criterion::BenchmarkId; use criterion::Criterion; /// Number of days we have an implementation to benchmark const DAYS_IMPLEMENTED: u8 = 25; fn read_input(day: u8) -> std::io::Result> { let input_path = format!("inputs/{day:02}.txt"); let mut buffer = Vec::new(); File::open(input_path)?.read_to_end(&mut buffer)?; Ok(buffer) } pub fn benchmark_days(c: &mut Criterion) { for day in 1..=DAYS_IMPLEMENTED { if let Ok(input) = read_input(day) { let part1 = get_implementation(day, false).unwrap(); c.bench_with_input(BenchmarkId::new("part1", day), &input, |b, i| { b.iter(|| part1(i)); }); if day < 25 { let part2 = get_implementation(day, true).unwrap(); c.bench_with_input(BenchmarkId::new("part2", day), &input, |b, i| { b.iter(|| part2(i)); }); } } } } criterion_group!(benches, benchmark_days); criterion_main!(benches);