median-accumulator/benches/comparison.rs

61 lines
1.5 KiB
Rust

use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
use rand::Rng;
fn compare_crates(c: &mut Criterion) {
let mut rng = rand::thread_rng();
let mut group = c.benchmark_group("Comparison");
for len in [10, 50, 100, 500, 1000] {
let samples: Vec<u32> = (0..len).map(|_| rng.gen_range(0..len / 5)).collect();
group.bench_with_input(
BenchmarkId::new("median_accumulator 1:5", len),
&samples,
|b, _i| {
b.iter(|| {
let mut median = median_accumulator::MedianAcc::new();
samples.iter().for_each(|s| median.push(*s));
median.get_median()
})
},
);
group.bench_with_input(
BenchmarkId::new("medianheap 1:5", len),
&samples,
|b, _i| {
b.iter(|| {
let mut median = medianheap::MedianHeap::new();
samples.iter().for_each(|s| median.push(*s));
median.median()
})
},
);
let samples: Vec<u32> = (0..len).map(|_| rng.gen_range(0..len)).collect();
group.bench_with_input(
BenchmarkId::new("median_accumulator 1:1", len),
&samples,
|b, _i| {
b.iter(|| {
let mut median = median_accumulator::MedianAcc::new();
samples.iter().for_each(|s| median.push(*s));
median.get_median()
})
},
);
group.bench_with_input(
BenchmarkId::new("medianheap 1:1", len),
&samples,
|b, _i| {
b.iter(|| {
let mut median = medianheap::MedianHeap::new();
samples.iter().for_each(|s| median.push(*s));
median.median()
})
},
);
}
group.finish();
}
criterion_group!(benches, compare_crates);
criterion_main!(benches);