summaryrefslogtreecommitdiff
path: root/2018/benches/day_benchmark.rs
blob: a37ba73708ed186074751d1c6065a3a35427f867 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use std::io::{self, Read, BufReader, Error, ErrorKind};
use std::fs::File;
use criterion::{Criterion, criterion_group, criterion_main};

// day 14: ~0.508

fn fibo(n: u64) -> u64 {
    match n {
        0 => 1,
        1 => 1,
        n => fibo(n-1) + fibo(n-2),
    }
}

fn fib_benchmark(c: &mut Criterion) {
    c.bench_function("fib 20", |b| b.iter(|| fibo(20)));
}

fn file_for_day(day: i32) -> io::Result<BufReader<File>> {
    match File::open(format!("input/{}.txt", day)) {
        Ok(f) => Ok(BufReader::new(f)),
        Err(_) => Err(Error::new(ErrorKind::Other, format!("No input file for day {}", day)))
    }
}

fn day14_benchmark(c: &mut Criterion) {
    let mut input = Vec::new();
    file_for_day(14).unwrap().read_to_end(&mut input).unwrap();

    c.bench_function("day 14", |b| b.iter(||
        day14::main(BufReader::new(&input[..])).unwrap()
    ));
}

criterion_group!(benches, fib_benchmark);
criterion_main!(benches);