use criterion::{black_box, criterion_group, criterion_main, Criterion, BenchmarkId};
fn fibonacci_recursive(n: u64) -> u64 {
match n {
0 | 1 => n,
_ => fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2),
}
}
fn fibonacci_iterative(n: u64) -> u64 {
let (mut a, mut b) = (0, 1);
for _ in 0..n {
let temp = a + b;
a = b;
b = temp;
}
a
}
fn bench_fibonacci(c: &mut Criterion) {
let mut group = c.benchmark_group("fibonacci");
for n in [10, 20, 30] {
group.bench_with_input(
BenchmarkId::new("recursive", n),
&n,
|b, &n| b.iter(|| fibonacci_recursive(black_box(n))),
);
group.bench_with_input(
BenchmarkId::new("iterative", n),
&n,
|b, &n| b.iter(|| fibonacci_iterative(black_box(n))),
);
}
group.finish();
}
criterion_group!(benches, bench_fibonacci);
criterion_main!(benches);
use criterion::{Criterion, SamplingMode};
fn bench_config(c: &mut Criterion) {
let mut group = c.benchmark_group("my_group");
group.sample_size(100);
group.sampling_mode(SamplingMode::Flat);
group.measurement_time(std::time::Duration::from_secs(5));
group.bench_function("my_fn", |b| {
b.iter(|| { })
});
group.finish();
}