@@ -10,7 +10,10 @@ use test::{black_box, Bencher};
1010
1111use hashbrown:: hash_map:: DefaultHashBuilder ;
1212use hashbrown:: HashMap ;
13- use std:: collections:: hash_map:: RandomState ;
13+ use std:: {
14+ collections:: hash_map:: RandomState ,
15+ sync:: atomic:: { self , AtomicUsize } ,
16+ } ;
1417
1518const 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+
4359macro_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!(
211230fn 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) {
237256fn 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