mirror of
https://github.com/wez/wezterm.git
synced 2024-11-10 15:04:32 +03:00
14f0162688
When adding sparse ranges the cartesian product of range combinations was explored to find intersections, which is pretty awful if there are 1 million entries to be inserted. This commit employs binary search to reduce the complexity, at the expense of requiring that the internal range array is sorted.
44 lines
1.2 KiB
Rust
44 lines
1.2 KiB
Rust
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
|
use rangeset::RangeSet;
|
|
|
|
fn build_contig_rangeset(size: usize) -> RangeSet<usize> {
|
|
let mut set = RangeSet::new();
|
|
for i in 0..size {
|
|
set.add(i);
|
|
}
|
|
set
|
|
}
|
|
|
|
fn build_sparse_rangeset(size: usize) -> RangeSet<usize> {
|
|
let mut set = RangeSet::new();
|
|
for i in (0..size).step_by(2) {
|
|
set.add(i);
|
|
}
|
|
set
|
|
}
|
|
|
|
pub fn criterion_benchmark(c: &mut Criterion) {
|
|
c.bench_function("Contig 100", |b| {
|
|
b.iter(|| black_box(build_contig_rangeset(100)))
|
|
});
|
|
c.bench_function("Contig 10000", |b| {
|
|
b.iter(|| black_box(build_contig_rangeset(10000)))
|
|
});
|
|
c.bench_function("Contig 1000000", |b| {
|
|
b.iter(|| black_box(build_contig_rangeset(1000000)))
|
|
});
|
|
|
|
c.bench_function("Sparse 100", |b| {
|
|
b.iter(|| black_box(build_sparse_rangeset(100)))
|
|
});
|
|
c.bench_function("Sparse 10000", |b| {
|
|
b.iter(|| black_box(build_sparse_rangeset(10000)))
|
|
});
|
|
c.bench_function("Sparse 1000000", |b| {
|
|
b.iter(|| black_box(build_sparse_rangeset(1000000)))
|
|
});
|
|
}
|
|
|
|
criterion_group!(benches, criterion_benchmark);
|
|
criterion_main!(benches);
|