Benchmark all inserts

This commit is contained in:
Mikolaj Figurski
2023-01-12 12:35:06 -05:00
parent 3ff3d19e71
commit 38ffd6801f
+55 -9
View File
@@ -10,11 +10,11 @@ use range_bounds_map::*;
/// linear multiplier for work done by benchmarks
const REPEAT: usize = 100;
/// utility for constructing identity [i,i]->i map for benches
fn build_identity_map(n: usize) -> RangeBoundsMap<usize, Range<usize>, usize> {
let mut map = RangeBoundsMap::new();
for i in 0..n {
if let Err(OverlapError) = map.insert_platonic((2 * i)..(2 * i + 1), i)
{
if let Err(OverlapError) = map.insert_platonic(i..i + 1, i) {
panic!("Failed to insert")
}
}
@@ -26,23 +26,69 @@ fn bench_insert_platonic(b: &mut Bencher) {
b.iter(|| {
let mut map = RangeBoundsMap::new();
for i in 0..REPEAT {
let r = (2 * i)..(2 * i + 1);
let r = i..=i;
if let Err(OverlapError) = map.insert_platonic(r, i) {
panic!("Failed to insert")
panic!("Failed to insert");
}
}
});
}
#[bench]
fn bench_overlaps(b: &mut Bencher) {
let map = build_identity_map(REPEAT);
b.iter(|| for _ in map.overlapping(&(0..2 * REPEAT)) {})
fn bench_insert_coalesce_touching(b: &mut Bencher) {
b.iter(|| {
let mut map = RangeBoundsMap::new();
for i in 0..REPEAT / 2 {
let r1 = (10 * i)..(10 * i + 1);
let r2 = (10 * i + 1)..(10 * i + 2);
if let Err(e) = map.insert_coalesce_touching(r1, true) {
panic!("Failed to insert: {:?}", e)
}
if let Err(e) = map.insert_coalesce_touching(r2, true) {
panic!("Failed to insert: {:?}", e)
}
}
})
}
#[bench]
fn bench_get_entry_at_point(b: &mut Bencher) {
b.iter(|| {})
fn bench_insert_coalesce_overlapping(b: &mut Bencher) {
b.iter(|| {
let mut map = RangeBoundsMap::new();
for i in 0..REPEAT / 2 {
let r1 = (10 * i)..(10 * i + 1);
let r2 = (10 * i)..(10 * i + 2);
if let Err(e) = map.insert_coalesce_overlapping(r1, true) {
panic!("Failed to insert: {:?}", e)
}
if let Err(e) = map.insert_coalesce_overlapping(r2, true) {
panic!("Failed to insert: {:?}", e)
}
}
})
}
#[bench]
fn bench_insert_coalesce_touching_or_overlapping(b: &mut Bencher) {
b.iter(|| {
let mut map = RangeBoundsMap::new();
for i in 0..REPEAT / 2 {
let r1 = (10 * i + 1)..(10 * i + 2);
let r2 = (10 * i)..(10 * i + 4);
if let Err(e) = map.insert_coalesce_touching_or_overlapping(r1, 1) {
panic!("Failed to insert: {:?}", e)
}
if let Err(e) = map.insert_coalesce_touching_or_overlapping(r2, 2) {
panic!("Failed to insert: {:?}", e)
}
}
})
}
#[bench]
fn bench_overlaps(b: &mut Bencher) {
let map = build_identity_map(REPEAT);
b.iter(|| for _ in map.overlapping(&(0..2 * REPEAT)) {})
}
#[bench]