Skip to content

Commit 297917d

Browse files
author
Markus Westerlind
committed
Include dropping behaviour in bench
1 parent adf06c2 commit 297917d

File tree

1 file changed

+33
-14
lines changed

1 file changed

+33
-14
lines changed

benches/bench.rs

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ use test::{black_box, Bencher};
1010

1111
use hashbrown::hash_map::DefaultHashBuilder;
1212
use hashbrown::HashMap;
13-
use std::collections::hash_map::RandomState;
13+
use std::{
14+
collections::hash_map::RandomState,
15+
sync::atomic::{self, AtomicUsize},
16+
};
1417

1518
const SIZE: usize = 1000;
1619

@@ -40,6 +43,19 @@ impl Iterator for RandomKeys {
4043
}
4144
}
4245

46+
// Just an arbitrary side effect to
47+
lazy_static::lazy_static! {
48+
static ref SIDE_EFFECT: AtomicUsize = AtomicUsize::new(0);
49+
}
50+
51+
#[derive(Clone)]
52+
struct DropType(usize);
53+
impl Drop for DropType {
54+
fn drop(&mut self) {
55+
SIDE_EFFECT.fetch_add(self.0, atomic::Ordering::SeqCst);
56+
}
57+
}
58+
4359
macro_rules! bench_suite {
4460
($bench_macro:ident, $bench_ahash_serial:ident, $bench_std_serial:ident,
4561
$bench_ahash_highbits:ident, $bench_std_highbits:ident,
@@ -69,10 +85,11 @@ macro_rules! bench_insert {
6985
b.iter(|| {
7086
m.clear();
7187
for i in ($keydist).take(SIZE) {
72-
m.insert(i, i);
88+
m.insert(i, DropType(i));
7389
}
7490
black_box(&mut m);
75-
})
91+
});
92+
eprintln!("{}", SIDE_EFFECT.load(atomic::Ordering::SeqCst));
7693
}
7794
};
7895
}
@@ -93,7 +110,7 @@ macro_rules! bench_insert_erase {
93110
fn $name(b: &mut Bencher) {
94111
let mut base = $maptype::default();
95112
for i in ($keydist).take(SIZE) {
96-
base.insert(i, i);
113+
base.insert(i, DropType(i));
97114
}
98115
let skip = $keydist.skip(SIZE);
99116
b.iter(|| {
@@ -103,11 +120,12 @@ macro_rules! bench_insert_erase {
103120
// While keeping the size constant,
104121
// replace the first keydist with the second.
105122
for (add, remove) in (&mut add_iter).zip(&mut remove_iter).take(SIZE) {
106-
m.insert(add, add);
123+
m.insert(add, DropType(add));
107124
black_box(m.remove(&remove));
108125
}
109126
black_box(m);
110-
})
127+
});
128+
eprintln!("{}", SIDE_EFFECT.load(atomic::Ordering::SeqCst));
111129
}
112130
};
113131
}
@@ -128,14 +146,15 @@ macro_rules! bench_lookup {
128146
fn $name(b: &mut Bencher) {
129147
let mut m = $maptype::default();
130148
for i in $keydist.take(SIZE) {
131-
m.insert(i, i);
149+
m.insert(i, DropType(i));
132150
}
133151

134152
b.iter(|| {
135153
for i in $keydist.take(SIZE) {
136154
black_box(m.get(&i));
137155
}
138-
})
156+
});
157+
eprintln!("{}", SIDE_EFFECT.load(atomic::Ordering::SeqCst));
139158
}
140159
};
141160
}
@@ -157,7 +176,7 @@ macro_rules! bench_lookup_fail {
157176
let mut m = $maptype::default();
158177
let mut iter = $keydist;
159178
for i in (&mut iter).take(SIZE) {
160-
m.insert(i, i);
179+
m.insert(i, DropType(i));
161180
}
162181

163182
b.iter(|| {
@@ -185,7 +204,7 @@ macro_rules! bench_iter {
185204
fn $name(b: &mut Bencher) {
186205
let mut m = $maptype::default();
187206
for i in ($keydist).take(SIZE) {
188-
m.insert(i, i);
207+
m.insert(i, DropType(i));
189208
}
190209

191210
b.iter(|| {
@@ -211,7 +230,7 @@ bench_suite!(
211230
fn clone_small(b: &mut Bencher) {
212231
let mut m = HashMap::new();
213232
for i in 0..10 {
214-
m.insert(i, i);
233+
m.insert(i, DropType(i));
215234
}
216235

217236
b.iter(|| {
@@ -224,7 +243,7 @@ fn clone_from_small(b: &mut Bencher) {
224243
let mut m = HashMap::new();
225244
let mut m2 = HashMap::new();
226245
for i in 0..10 {
227-
m.insert(i, i);
246+
m.insert(i, DropType(i));
228247
}
229248

230249
b.iter(|| {
@@ -237,7 +256,7 @@ fn clone_from_small(b: &mut Bencher) {
237256
fn clone_large(b: &mut Bencher) {
238257
let mut m = HashMap::new();
239258
for i in 0..1000 {
240-
m.insert(i, i);
259+
m.insert(i, DropType(i));
241260
}
242261

243262
b.iter(|| {
@@ -250,7 +269,7 @@ fn clone_from_large(b: &mut Bencher) {
250269
let mut m = HashMap::new();
251270
let mut m2 = HashMap::new();
252271
for i in 0..1000 {
253-
m.insert(i, i);
272+
m.insert(i, DropType(i));
254273
}
255274

256275
b.iter(|| {

0 commit comments

Comments
 (0)