Skip to content

Commit fd794a5

Browse files
committedJun 19, 2017
Port HashMap benchmark from std
1 parent ff2164d commit fd794a5

File tree

2 files changed

+245
-0
lines changed

2 files changed

+245
-0
lines changed
 

‎Cargo.toml

+7
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,10 @@ readme = "README.md"
1414
[dependencies]
1515
nodrop = "0.1"
1616
num-traits = "0.1"
17+
18+
[dev-dependencies]
19+
bencher = "0.1"
20+
21+
[[bench]]
22+
name = "hashmap"
23+
harness = false

‎benches/hashmap.rs

+238
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
extern crate rudy;
12+
13+
#[macro_use]
14+
extern crate bencher;
15+
16+
use bencher::Bencher;
17+
18+
fn hashmap_new_drop(b: &mut Bencher) {
19+
use std::collections::HashMap;
20+
21+
b.iter(|| {
22+
let m: HashMap<u32, u32> = HashMap::new();
23+
assert_eq!(m.len(), 0);
24+
})
25+
}
26+
27+
fn hashmap_new_insert_drop(b: &mut Bencher) {
28+
use std::collections::HashMap;
29+
30+
b.iter(|| {
31+
let mut m = HashMap::new();
32+
m.insert(0u32, 0);
33+
assert_eq!(m.len(), 1);
34+
})
35+
}
36+
37+
fn hashmap_grow_by_insertion(b: &mut Bencher) {
38+
use std::collections::HashMap;
39+
40+
let mut m = HashMap::new();
41+
42+
for i in 1u32..1001 {
43+
m.insert(i, i);
44+
}
45+
46+
let mut k: u32 = 1001;
47+
48+
b.iter(|| {
49+
m.insert(k, k);
50+
k += 1;
51+
});
52+
}
53+
54+
fn hashmap_find_existing(b: &mut Bencher) {
55+
use std::collections::HashMap;
56+
57+
let mut m = HashMap::new();
58+
59+
for i in 1u32..1001 {
60+
m.insert(i, i);
61+
}
62+
63+
b.iter(|| {
64+
for i in 1u32..1001 {
65+
m.contains_key(&i);
66+
}
67+
});
68+
}
69+
70+
fn hashmap_find_nonexisting(b: &mut Bencher) {
71+
use std::collections::HashMap;
72+
73+
let mut m = HashMap::new();
74+
75+
for i in 1u32..1001 {
76+
m.insert(i, i);
77+
}
78+
79+
b.iter(|| {
80+
for i in 1001..2001 {
81+
m.contains_key(&i);
82+
}
83+
});
84+
}
85+
86+
fn hashmap_as_queue(b: &mut Bencher) {
87+
use std::collections::HashMap;
88+
89+
let mut m = HashMap::new();
90+
91+
for i in 1u32..1001 {
92+
m.insert(i, i);
93+
}
94+
95+
let mut k: u32 = 1;
96+
97+
b.iter(|| {
98+
m.remove(&k);
99+
m.insert(k + 1000, k + 1000);
100+
k += 1;
101+
});
102+
}
103+
104+
fn hashmap_get_remove_insert(b: &mut Bencher) {
105+
use std::collections::HashMap;
106+
107+
let mut m = HashMap::new();
108+
109+
for i in 1u32..1001 {
110+
m.insert(i, i);
111+
}
112+
113+
let mut k: u32 = 1;
114+
115+
b.iter(|| {
116+
m.get(&(k + 400));
117+
m.get(&(k + 2000));
118+
m.remove(&k);
119+
m.insert(k + 1000, k + 1000);
120+
k += 1;
121+
})
122+
}
123+
124+
fn rudymap_new_drop(b: &mut Bencher) {
125+
use rudy::rudymap::RudyMap;
126+
127+
b.iter(|| {
128+
let m: RudyMap<u32, u32> = RudyMap::new();
129+
assert_eq!(m.len(), 0);
130+
})
131+
}
132+
133+
fn rudymap_new_insert_drop(b: &mut Bencher) {
134+
use rudy::rudymap::RudyMap;
135+
136+
b.iter(|| {
137+
let mut m = RudyMap::new();
138+
m.insert(0u32, 0);
139+
assert_eq!(m.len(), 1);
140+
})
141+
}
142+
143+
fn rudymap_grow_by_insertion(b: &mut Bencher) {
144+
use rudy::rudymap::RudyMap;
145+
146+
let mut m = RudyMap::new();
147+
148+
for i in 1u32..1001 {
149+
m.insert(i, i);
150+
}
151+
152+
let mut k: u32 = 1001;
153+
154+
b.iter(|| {
155+
m.insert(k, k);
156+
k += 1;
157+
});
158+
}
159+
160+
fn rudymap_find_existing(b: &mut Bencher) {
161+
use rudy::rudymap::RudyMap;
162+
163+
let mut m = RudyMap::new();
164+
165+
for i in 1u32..1001 {
166+
m.insert(i, i);
167+
}
168+
169+
b.iter(|| {
170+
for i in 1u32..1001 {
171+
m.contains_key(i);
172+
}
173+
});
174+
}
175+
176+
fn rudymap_find_nonexisting(b: &mut Bencher) {
177+
use rudy::rudymap::RudyMap;
178+
179+
let mut m = RudyMap::new();
180+
181+
for i in 1u32..1001 {
182+
m.insert(i, i);
183+
}
184+
185+
b.iter(|| {
186+
for i in 1001u32..2001 {
187+
m.contains_key(i);
188+
}
189+
});
190+
}
191+
192+
fn rudymap_as_queue(b: &mut Bencher) {
193+
use rudy::rudymap::RudyMap;
194+
195+
let mut m = RudyMap::new();
196+
197+
for i in 1u32..1001 {
198+
m.insert(i, i);
199+
}
200+
201+
let mut k: u32 = 1;
202+
203+
b.iter(|| {
204+
m.remove(k);
205+
m.insert(k + 1000, k + 1000);
206+
k += 1;
207+
});
208+
}
209+
210+
fn rudymap_get_remove_insert(b: &mut Bencher) {
211+
use rudy::rudymap::RudyMap;
212+
213+
let mut m = RudyMap::new();
214+
215+
for i in 1u32..1001 {
216+
m.insert(i, i);
217+
}
218+
219+
let mut k: u32 = 1;
220+
221+
b.iter(|| {
222+
m.get(k + 400);
223+
m.get(k + 2000);
224+
m.remove(k);
225+
m.insert(k + 1000, k + 1000);
226+
k += 1;
227+
})
228+
}
229+
230+
benchmark_group!(benches,
231+
hashmap_get_remove_insert, hashmap_as_queue, hashmap_find_nonexisting,
232+
hashmap_find_existing, hashmap_grow_by_insertion, hashmap_new_insert_drop,
233+
hashmap_new_drop,
234+
rudymap_get_remove_insert, rudymap_as_queue, rudymap_find_nonexisting,
235+
rudymap_find_existing, rudymap_grow_by_insertion, rudymap_new_insert_drop,
236+
rudymap_new_drop
237+
);
238+
benchmark_main!(benches);

0 commit comments

Comments
 (0)
Please sign in to comment.