MCPcopy Create free account
hub / github.com/KentBeck/BPlusTree3 / benchmark_insert

Function benchmark_insert

rust/src/comprehensive_performance_benchmark.rs:98–155  ·  view source on GitHub ↗
(
    bplus: &BPlusTreeMap<usize, usize>,
    _btree: &BTreeMap<usize, usize>,
    tree_size: usize,
    sample_size: usize,
)

Source from the content-addressed store, hash-verified

96}
97
98fn benchmark_insert(
99 bplus: &BPlusTreeMap<usize, usize>,
100 _btree: &BTreeMap<usize, usize>,
101 tree_size: usize,
102 sample_size: usize,
103) {
104 println!("➕ INSERT Performance:");
105
106 // Generate new keys for insertion (beyond existing range)
107 let new_keys: Vec<usize> = (tree_size..tree_size + sample_size).collect();
108
109 // Create fresh trees for insertion testing
110 let capacity = bplus.capacity;
111 let mut bplus_copy = BPlusTreeMap::new(capacity).unwrap();
112 let mut btree_copy = BTreeMap::new();
113
114 // Pre-populate with original data
115 for i in 0..tree_size {
116 bplus_copy.insert(i, i * 2);
117 btree_copy.insert(i, i * 2);
118 }
119
120 // Benchmark BPlusTreeMap insert
121 let start = Instant::now();
122 for &key in &new_keys {
123 bplus_copy.insert(key, key * 2);
124 }
125 let bplus_time = start.elapsed();
126
127 // Reset and benchmark BTreeMap insert
128 btree_copy.clear();
129 for i in 0..tree_size {
130 btree_copy.insert(i, i * 2);
131 }
132
133 let start = Instant::now();
134 for &key in &new_keys {
135 btree_copy.insert(key, key * 2);
136 }
137 let btree_time = start.elapsed();
138
139 let bplus_per_op = bplus_time.as_nanos() as f64 / sample_size as f64;
140 let btree_per_op = btree_time.as_nanos() as f64 / sample_size as f64;
141 let speedup = btree_per_op / bplus_per_op;
142
143 println!(" BPlusTreeMap: {:.1}ns per insert", bplus_per_op);
144 println!(" BTreeMap: {:.1}ns per insert", btree_per_op);
145 println!(
146 " Ratio: {:.2}x {}",
147 speedup,
148 if speedup > 1.0 {
149 "(BPlusTreeMap faster)"
150 } else {
151 "(BTreeMap faster)"
152 }
153 );
154 println!();
155}

Callers 1

Calls 2

insertMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected