criterion

How to benchmark functions using criterion library?

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

pub fn fib(n: i32) -> i32 {
    if n > 1 {
        fib(n - 1) + fib(n - 2)
    } else {
        1
    }
}

pub fn fib_fast(n: i32) -> i32 {
    let mut a = 1;
    let mut b = 1;

    for _ in 0..n {
        b += a;
        a = b - a;
    }

    a
}

fn criterion_fib_slow(c: &mut Criterion) {
    c.bench_function("fib 10", |b| b.iter(|| fib(black_box(10))));
}

fn criterion_fib_fast(c: &mut Criterion) {
    c.bench_function("fib_fast 10", |b| b.iter(|| fib_fast(black_box(10))));
}

criterion_group!(benches, criterion_fib_fast, criterion_fib_slow);
criterion_main!(benches);

Add following dependencies to the Cargo.toml.

[dev-dependencies]
criterion = "0.3.1"

[[bench]]
name = "lib"
path = "src/lib.rs"
harness = false

Benchmarks can be run by cargo bench.

Last updated