diff --git a/2020/Cargo.toml b/2020/Cargo.toml index f9fd536..bd823fa 100644 --- a/2020/Cargo.toml +++ b/2020/Cargo.toml @@ -11,5 +11,12 @@ itertools = "0.9" num-integer = "0.1" regex = "1" +[dev-dependencies] +criterion = "0.3" + [profile.release] debug = true + +[[bench]] +name = "days" +harness = false diff --git a/2020/benches/days.rs b/2020/benches/days.rs new file mode 100644 index 0000000..573e812 --- /dev/null +++ b/2020/benches/days.rs @@ -0,0 +1,47 @@ +use std::fs::File; +use std::io::Read; + +use aoc_2020::get_implementation; +use criterion::criterion_group; +use criterion::criterion_main; +use criterion::BenchmarkId; +use criterion::Criterion; + +const DAYS_IMPLEMENTED: usize = 19; + +fn read_input(day: usize) -> Vec { + let input_path = format!("inputs/{:02}.txt", day); + + let mut buffer = Vec::new(); + File::open(input_path) + .expect("Failed to open input file") + .read_to_end(&mut buffer) + .expect("Failed to read input file"); + + buffer +} + +pub fn benchmark_days(c: &mut Criterion) { + for day in 1..=DAYS_IMPLEMENTED { + let input = read_input(day); + + c.bench_with_input(BenchmarkId::new("part1", day), &input, |b, i| { + b.iter(|| { + let mut implementation = get_implementation(day); + let mut i: &[u8] = &i; + implementation.part1(&mut i) + }); + }); + + c.bench_with_input(BenchmarkId::new("part2", day), &input, |b, i| { + b.iter(|| { + let mut implementation = get_implementation(day); + let mut i: &[u8] = &i; + implementation.part2(&mut i) + }); + }); + } +} + +criterion_group!(benches, benchmark_days); +criterion_main!(benches);