Skip to content

Commit dbd6557

Browse files
committed
fix core-map.rs benchmark
1 parent 7f0fa14 commit dbd6557

File tree

1 file changed

+175
-33
lines changed

1 file changed

+175
-33
lines changed

src/test/bench/core-map.rs

Lines changed: 175 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,9 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
/*
12-
13-
14-
15-
*/
16-
1711
extern mod std;
1812
use std::map;
19-
use core::mutable::Mut;
13+
use std::treemap::TreeMap;
2014
use core::hashmap::linear::*;
2115
use core::io::WriterUtil;
2216

@@ -38,13 +32,10 @@ fn timed(result: &mut float,
3832
*result = (end - start);
3933
}
4034

41-
fn int_benchmarks<M: map::Map<uint, uint>>(make_map: fn() -> M,
42-
rng: @rand::Rng,
43-
num_keys: uint,
44-
results: &mut Results) {
35+
fn old_int_benchmarks(rng: @rand::Rng, num_keys: uint, results: &mut Results) {
4536

4637
{
47-
let map = make_map();
38+
let map = map::HashMap();
4839
do timed(&mut results.sequential_ints) {
4940
for uint::range(0, num_keys) |i| {
5041
map.insert(i, i+1);
@@ -57,7 +48,7 @@ fn int_benchmarks<M: map::Map<uint, uint>>(make_map: fn() -> M,
5748
}
5849

5950
{
60-
let map = make_map();
51+
let map = map::HashMap();
6152
do timed(&mut results.random_ints) {
6253
for uint::range(0, num_keys) |i| {
6354
map.insert(rng.next() as uint, i);
@@ -66,7 +57,7 @@ fn int_benchmarks<M: map::Map<uint, uint>>(make_map: fn() -> M,
6657
}
6758

6859
{
69-
let map = make_map();
60+
let map = map::HashMap();
7061
for uint::range(0, num_keys) |i| {
7162
map.insert(i, i);;
7263
}
@@ -79,12 +70,9 @@ fn int_benchmarks<M: map::Map<uint, uint>>(make_map: fn() -> M,
7970
}
8071
}
8172

82-
fn str_benchmarks<M: map::Map<~str, uint>>(make_map: fn() -> M,
83-
rng: @rand::Rng,
84-
num_keys: uint,
85-
results: &mut Results) {
73+
fn old_str_benchmarks(rng: @rand::Rng, num_keys: uint, results: &mut Results) {
8674
{
87-
let map = make_map();
75+
let map = map::HashMap();
8876
do timed(&mut results.sequential_strings) {
8977
for uint::range(0, num_keys) |i| {
9078
let s = uint::to_str(i, 10);
@@ -99,7 +87,7 @@ fn str_benchmarks<M: map::Map<~str, uint>>(make_map: fn() -> M,
9987
}
10088

10189
{
102-
let map = make_map();
90+
let map = map::HashMap();
10391
do timed(&mut results.random_strings) {
10492
for uint::range(0, num_keys) |i| {
10593
let s = uint::to_str(rng.next() as uint, 10);
@@ -109,7 +97,7 @@ fn str_benchmarks<M: map::Map<~str, uint>>(make_map: fn() -> M,
10997
}
11098

11199
{
112-
let map = make_map();
100+
let map = map::HashMap();
113101
for uint::range(0, num_keys) |i| {
114102
map.insert(uint::to_str(i, 10), i);
115103
}
@@ -121,6 +109,158 @@ fn str_benchmarks<M: map::Map<~str, uint>>(make_map: fn() -> M,
121109
}
122110
}
123111

112+
fn linear_int_benchmarks(rng: @rand::Rng, num_keys: uint, results: &mut Results) {
113+
{
114+
let mut map = LinearMap::new();
115+
do timed(&mut results.sequential_ints) {
116+
for uint::range(0, num_keys) |i| {
117+
map.insert(i, i+1);
118+
}
119+
120+
for uint::range(0, num_keys) |i| {
121+
assert map.find(&i).unwrap() == &(i+1);
122+
}
123+
}
124+
}
125+
126+
{
127+
let mut map = LinearMap::new();
128+
do timed(&mut results.random_ints) {
129+
for uint::range(0, num_keys) |i| {
130+
map.insert(rng.next() as uint, i);
131+
}
132+
}
133+
}
134+
135+
{
136+
let mut map = LinearMap::new();
137+
for uint::range(0, num_keys) |i| {
138+
map.insert(i, i);;
139+
}
140+
141+
do timed(&mut results.delete_ints) {
142+
for uint::range(0, num_keys) |i| {
143+
assert map.remove(&i);
144+
}
145+
}
146+
}
147+
}
148+
149+
fn linear_str_benchmarks(rng: @rand::Rng, num_keys: uint, results: &mut Results) {
150+
{
151+
let mut map = LinearMap::new();
152+
do timed(&mut results.sequential_strings) {
153+
for uint::range(0, num_keys) |i| {
154+
let s = uint::to_str(i, 10);
155+
map.insert(s, i);
156+
}
157+
158+
for uint::range(0, num_keys) |i| {
159+
let s = uint::to_str(i, 10);
160+
assert map.find(&s).unwrap() == &i;
161+
}
162+
}
163+
}
164+
165+
{
166+
let mut map = LinearMap::new();
167+
do timed(&mut results.random_strings) {
168+
for uint::range(0, num_keys) |i| {
169+
let s = uint::to_str(rng.next() as uint, 10);
170+
map.insert(s, i);
171+
}
172+
}
173+
}
174+
175+
{
176+
let mut map = LinearMap::new();
177+
for uint::range(0, num_keys) |i| {
178+
map.insert(uint::to_str(i, 10), i);
179+
}
180+
do timed(&mut results.delete_strings) {
181+
for uint::range(0, num_keys) |i| {
182+
assert map.remove(&uint::to_str(i, 10));
183+
}
184+
}
185+
}
186+
}
187+
188+
fn tree_int_benchmarks(rng: @rand::Rng, num_keys: uint, results: &mut Results) {
189+
{
190+
let mut map = TreeMap::new();
191+
do timed(&mut results.sequential_ints) {
192+
for uint::range(0, num_keys) |i| {
193+
map.insert(i, i+1);
194+
}
195+
196+
for uint::range(0, num_keys) |i| {
197+
assert map.find(&i).unwrap() == &(i+1);
198+
}
199+
}
200+
}
201+
202+
{
203+
let mut map = TreeMap::new();
204+
do timed(&mut results.random_ints) {
205+
for uint::range(0, num_keys) |i| {
206+
map.insert(rng.next() as uint, i);
207+
}
208+
}
209+
}
210+
211+
{
212+
let mut map = TreeMap::new();
213+
for uint::range(0, num_keys) |i| {
214+
map.insert(i, i);;
215+
}
216+
217+
do timed(&mut results.delete_ints) {
218+
for uint::range(0, num_keys) |i| {
219+
assert map.remove(&i);
220+
}
221+
}
222+
}
223+
}
224+
225+
fn tree_str_benchmarks(rng: @rand::Rng, num_keys: uint, results: &mut Results) {
226+
{
227+
let mut map = TreeMap::new();
228+
do timed(&mut results.sequential_strings) {
229+
for uint::range(0, num_keys) |i| {
230+
let s = uint::to_str(i, 10);
231+
map.insert(s, i);
232+
}
233+
234+
for uint::range(0, num_keys) |i| {
235+
let s = uint::to_str(i, 10);
236+
assert map.find(&s).unwrap() == &i;
237+
}
238+
}
239+
}
240+
241+
{
242+
let mut map = TreeMap::new();
243+
do timed(&mut results.random_strings) {
244+
for uint::range(0, num_keys) |i| {
245+
let s = uint::to_str(rng.next() as uint, 10);
246+
map.insert(s, i);
247+
}
248+
}
249+
}
250+
251+
{
252+
let mut map = TreeMap::new();
253+
for uint::range(0, num_keys) |i| {
254+
map.insert(uint::to_str(i, 10), i);
255+
}
256+
do timed(&mut results.delete_strings) {
257+
for uint::range(0, num_keys) |i| {
258+
assert map.remove(&uint::to_str(i, 10));
259+
}
260+
}
261+
}
262+
}
263+
124264
fn write_header(header: &str) {
125265
io::stdout().write_str(header);
126266
io::stdout().write_str("\n");
@@ -167,22 +307,24 @@ fn main() {
167307
{
168308
let rng = rand::seeded_rng(&seed);
169309
let mut results = empty_results();
170-
int_benchmarks::<map::HashMap<uint, uint>>(
171-
map::HashMap, rng, num_keys, &mut results);
172-
str_benchmarks::<map::HashMap<~str, uint>>(
173-
map::HashMap, rng, num_keys, &mut results);
174-
write_results("libstd::map::hashmap", &results);
310+
old_int_benchmarks(rng, num_keys, &mut results);
311+
old_str_benchmarks(rng, num_keys, &mut results);
312+
write_results("std::map::HashMap", &results);
313+
}
314+
315+
{
316+
let rng = rand::seeded_rng(&seed);
317+
let mut results = empty_results();
318+
linear_int_benchmarks(rng, num_keys, &mut results);
319+
linear_str_benchmarks(rng, num_keys, &mut results);
320+
write_results("core::hashmap::linear::LinearMap", &results);
175321
}
176322

177323
{
178324
let rng = rand::seeded_rng(&seed);
179325
let mut results = empty_results();
180-
int_benchmarks::<@Mut<LinearMap<uint, uint>>>(
181-
|| @Mut(LinearMap::new()),
182-
rng, num_keys, &mut results);
183-
str_benchmarks::<@Mut<LinearMap<~str, uint>>>(
184-
|| @Mut(LinearMap::new()),
185-
rng, num_keys, &mut results);
186-
write_results("libstd::map::hashmap", &results);
326+
tree_int_benchmarks(rng, num_keys, &mut results);
327+
tree_str_benchmarks(rng, num_keys, &mut results);
328+
write_results("std::treemap::TreeMap", &results);
187329
}
188330
}

0 commit comments

Comments
 (0)