use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
use hya_core::intervals::{IntervalSet, Range};
use std::hint::black_box;
fn bench_insert(c: &mut Criterion) {
let mut g = c.benchmark_group("intervals");
for n in [64usize, 1024, 8192] {
g.bench_with_input(BenchmarkId::new("insert_disjoint", n), &n, |b, &n| {
b.iter(|| {
let mut s = IntervalSet::new();
for i in 0..n {
let lo = (i as u64) * 2048;
s.insert(Range::new(lo, lo + 1024));
}
black_box(s.total())
})
});
g.bench_with_input(BenchmarkId::new("insert_coalescing", n), &n, |b, &n| {
b.iter(|| {
let mut s = IntervalSet::new();
for i in 0..n {
let lo = (i as u64) * 2048;
s.insert(Range::new(lo, lo + 1024));
}
for i in 0..n {
let lo = (i as u64) * 2048 + 1024;
s.insert(Range::new(lo, lo + 1024));
}
black_box(s.total())
})
});
}
g.finish();
}
criterion_group!(benches, bench_insert);
criterion_main!(benches);