🦀
Rust Cookbook
  • Introduction
  • Rust Introduction
  • Collections
    • Hashing
  • Text Processing
    • Splitting a string
    • Converting a string to vectors and back
    • Twoway
  • Benchmarking
    • criterion
  • Testing
  • Package Management
    • Cargo workspaces
  • Concurrent Programming
    • Actor model
      • Actix actors
      • Bastion
  • Parallel Programming
    • Ryaon
  • Optimisations
    • Cache alignment
  • TODO
Powered by GitBook
On this page
  1. Benchmarking

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.

PreviousBenchmarkingNextTesting

Last updated 5 years ago