From 38ffd6801f78307219d6f5e6835fc7a6873c7377 Mon Sep 17 00:00:00 2001 From: Mikolaj Figurski Date: Thu, 12 Jan 2023 12:35:06 -0500 Subject: [PATCH] Benchmark all inserts --- benches/bench.rs | 64 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 9 deletions(-) diff --git a/benches/bench.rs b/benches/bench.rs index ab694d6..a7dbcf1 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -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> { 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]