1
1
use std:: borrow:: Borrow ;
2
2
use std:: hash:: Hash ;
3
- use std:: collections:: { BTreeMap , HashMap } ;
3
+ use std:: collections:: BTreeMap ;
4
4
5
5
use rand:: prelude:: * ;
6
6
use criterion:: {
@@ -13,12 +13,12 @@ use criterion::{
13
13
measurement:: WallTime ,
14
14
} ;
15
15
use simple_bst:: SimpleBSTMap ;
16
+ // Looking to measure map implementation, not hasher performance so using a faster hasher
17
+ use fnv:: FnvHashMap as HashMap ;
16
18
17
19
use bst:: BSTMap ;
18
20
19
- trait Map < K , V > : Clone {
20
- fn new ( ) -> Self ;
21
-
21
+ trait Map < K , V > : Default + Clone {
22
22
fn len ( & self ) -> usize ;
23
23
24
24
fn get < Q > ( & self , key : & Q ) -> Option < & V >
@@ -41,10 +41,6 @@ macro_rules! impl_map {
41
41
impl <K : Clone , V : Clone > Map <K , V > for $name<K , V >
42
42
where K : $bound $( + $other_bound) * ,
43
43
{
44
- fn new( ) -> Self {
45
- $name:: new( )
46
- }
47
-
48
44
fn len( & self ) -> usize {
49
45
$name:: len( self )
50
46
}
@@ -128,7 +124,7 @@ fn slice_max<T: Copy + Ord>(data: &[T]) -> T {
128
124
129
125
/// Runs many consecutive inserts on a map
130
126
fn benchmark_inserts < M : Map < i64 , usize > > ( keys : & Keys , inserts : usize ) -> M {
131
- let mut map = M :: new ( ) ;
127
+ let mut map = M :: default ( ) ;
132
128
133
129
for key_i in 0 ..inserts {
134
130
black_box ( map. insert ( keys. get ( key_i as i64 ) , key_i) ) ;
@@ -139,7 +135,7 @@ fn benchmark_inserts<M: Map<i64, usize>>(keys: &Keys, inserts: usize) -> M {
139
135
140
136
/// Setup function for benchmark_gets
141
137
fn setup_benchmark_gets < M : Map < i64 , usize > > ( keys : & Keys , gets : usize ) -> M {
142
- let mut map = M :: new ( ) ;
138
+ let mut map = M :: default ( ) ;
143
139
144
140
for key_i in 0 ..gets {
145
141
black_box ( map. insert ( keys. get ( key_i as i64 ) , key_i) ) ;
@@ -161,7 +157,7 @@ fn benchmark_gets<M: Map<i64, usize>>(keys: &Keys, map: &mut M, gets: usize) {
161
157
162
158
/// Setup function for benchmark_removes
163
159
fn setup_benchmark_removes < M : Map < i64 , usize > > ( keys : & Keys , removes : usize ) -> M {
164
- let mut map = M :: new ( ) ;
160
+ let mut map = M :: default ( ) ;
165
161
166
162
for key_i in 0 ..removes {
167
163
black_box ( map. insert ( keys. get ( key_i as i64 ) , key_i) ) ;
@@ -188,7 +184,7 @@ fn benchmark_map_ops<M: Map<i64, usize>>(keys: &Keys, steps: usize) -> M {
188
184
const MAX_GETS : usize = 3 ;
189
185
const MAX_REMOVES : usize = 2 ;
190
186
191
- let mut map = M :: new ( ) ;
187
+ let mut map = M :: default ( ) ;
192
188
193
189
let mut key_i = 0 ;
194
190
for i in 0 ..steps {
@@ -232,7 +228,7 @@ fn benchmark_map_ops<M: Map<i64, usize>>(keys: &Keys, steps: usize) -> M {
232
228
233
229
/// Runs many consecutive inserts on a map
234
230
fn benchmark_inserts_multi < M : Map < i64 , usize > > ( keys : & Keys , inserts : usize , n : usize ) -> Vec < M > {
235
- let mut maps = vec ! [ M :: new ( ) ; n] ;
231
+ let mut maps = vec ! [ M :: default ( ) ; n] ;
236
232
237
233
for key_i in 0 ..inserts {
238
234
for map in & mut maps {
@@ -245,7 +241,7 @@ fn benchmark_inserts_multi<M: Map<i64, usize>>(keys: &Keys, inserts: usize, n: u
245
241
246
242
/// Setup function for benchmark_gets
247
243
fn setup_benchmark_gets_multi < M : Map < i64 , usize > > ( keys : & Keys , gets : usize , n : usize ) -> Vec < M > {
248
- let mut maps = vec ! [ M :: new ( ) ; n] ;
244
+ let mut maps = vec ! [ M :: default ( ) ; n] ;
249
245
250
246
for key_i in 0 ..gets {
251
247
for map in & mut maps {
0 commit comments