2 Commits

Author SHA1 Message Date
07cbf6cf53 Fix upcoming clippy warning 2021-12-12 15:56:05 +01:00
6e3252ce5a Add formal benchmarking code 2021-12-12 15:33:52 +01:00
3 changed files with 50 additions and 1 deletions

View File

@@ -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

42
2021/benches/days.rs Normal file
View File

@@ -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<u8> {
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);

View File

@@ -13,7 +13,7 @@ fn parse_input(input: &mut dyn Read) -> Vec<(Dir, i32)> {
let mut moves = Vec::new();
while let Some(line) = reader.next() {
let (dir, amount) = line.split_once(" ").unwrap();
let (dir, amount) = line.split_once(' ').unwrap();
let dir = match dir {
"up" => Dir::Up,