Benchmarking in stable Rust

Create bench/bench.rs:

use std::time::Duration;

use criterion::{black_box, criterion_group, criterion_main, Criterion};
use aoctemplate::*;

const INPUT: &str = include_str!("../input");

fn criterion_benchmark(c: &mut Criterion) {
    c.bench_function("parse_input", |b| b.iter(|| parse_input(black_box(INPUT))));
    let input = parse_input(INPUT).unwrap();
    c.bench_function("part1", |b| b.iter(|| part1(black_box(&input))));
    c.bench_function("part2", |b| b.iter(|| part2(black_box(&input))));
}

// criterion_group!(benches, criterion_benchmark);
criterion_group!{
    name = benches;
    config = Criterion::default().measurement_time(Duration::from_secs(10));
    targets = criterion_benchmark
}
criterion_main!(benches);

And add this to Cargo.toml:

[[bench]]
name = "bench"
harness = false