From 6e3252ce5ae53366f446a1b8e4e81a55eeee85ea Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Sun, 12 Dec 2021 15:33:52 +0100 Subject: [PATCH] Add formal benchmarking code --- 2021/Cargo.toml | 7 +++++++ 2021/benches/days.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 2021/benches/days.rs diff --git a/2021/Cargo.toml b/2021/Cargo.toml index 421ee25..c6b5b0f 100644 --- a/2021/Cargo.toml +++ b/2021/Cargo.toml @@ -9,6 +9,13 @@ clap = { version = "3.0.0-rc.0", features = ["derive"] } itertools = "0.10" nom = "7" +[dev-dependencies] +criterion = "0.3" + [profile.release] # Keep debug information in release for better flamegraphs debug = true + +[[bench]] +name = "days" +harness = false diff --git a/2021/benches/days.rs b/2021/benches/days.rs new file mode 100644 index 0000000..d4b47db --- /dev/null +++ b/2021/benches/days.rs @@ -0,0 +1,42 @@ +use std::fs::File; +use std::io::Read; + +use aoc_2021::get_implementation; +use criterion::criterion_group; +use criterion::criterion_main; +use criterion::BenchmarkId; +use criterion::Criterion; + +const DAYS_IMPLEMENTED: usize = 12; + +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); + + let part1 = get_implementation(day, false); + let part2 = get_implementation(day, true); + + c.bench_with_input(BenchmarkId::new("part1", day), &input, |b, i| { + b.iter(|| part1(&mut &i[..])); + }); + + c.bench_with_input(BenchmarkId::new("part2", day), &input, |b, i| { + b.iter(|| part2(&mut &i[..])); + }); + } +} + +criterion_group!(benches, benchmark_days); +criterion_main!(benches);