8
8
// option. This file may not be copied, modified, or distributed
9
9
// except according to those terms.
10
10
11
- /*
12
-
13
-
14
-
15
- */
16
-
17
11
extern mod std;
18
12
use std:: map;
19
- use core :: mutable :: Mut ;
13
+ use std :: treemap :: TreeMap ;
20
14
use core:: hashmap:: linear:: * ;
21
15
use core:: io:: WriterUtil ;
22
16
@@ -38,13 +32,10 @@ fn timed(result: &mut float,
38
32
* result = ( end - start) ;
39
33
}
40
34
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 ) {
45
36
46
37
{
47
- let map = make_map ( ) ;
38
+ let map = map :: HashMap ( ) ;
48
39
do timed( & mut results. sequential_ints ) {
49
40
for uint:: range( 0 , num_keys) |i| {
50
41
map. insert ( i, i+1 ) ;
@@ -57,7 +48,7 @@ fn int_benchmarks<M: map::Map<uint, uint>>(make_map: fn() -> M,
57
48
}
58
49
59
50
{
60
- let map = make_map ( ) ;
51
+ let map = map :: HashMap ( ) ;
61
52
do timed( & mut results. random_ints ) {
62
53
for uint:: range( 0 , num_keys) |i| {
63
54
map. insert ( rng. next ( ) as uint , i) ;
@@ -66,7 +57,7 @@ fn int_benchmarks<M: map::Map<uint, uint>>(make_map: fn() -> M,
66
57
}
67
58
68
59
{
69
- let map = make_map ( ) ;
60
+ let map = map :: HashMap ( ) ;
70
61
for uint:: range( 0 , num_keys) |i| {
71
62
map. insert ( i, i) ; ;
72
63
}
@@ -79,12 +70,9 @@ fn int_benchmarks<M: map::Map<uint, uint>>(make_map: fn() -> M,
79
70
}
80
71
}
81
72
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 ) {
86
74
{
87
- let map = make_map ( ) ;
75
+ let map = map :: HashMap ( ) ;
88
76
do timed( & mut results. sequential_strings ) {
89
77
for uint:: range( 0 , num_keys) |i| {
90
78
let s = uint:: to_str ( i, 10 ) ;
@@ -99,7 +87,7 @@ fn str_benchmarks<M: map::Map<~str, uint>>(make_map: fn() -> M,
99
87
}
100
88
101
89
{
102
- let map = make_map ( ) ;
90
+ let map = map :: HashMap ( ) ;
103
91
do timed( & mut results. random_strings ) {
104
92
for uint:: range( 0 , num_keys) |i| {
105
93
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,
109
97
}
110
98
111
99
{
112
- let map = make_map ( ) ;
100
+ let map = map :: HashMap ( ) ;
113
101
for uint:: range( 0 , num_keys) |i| {
114
102
map. insert ( uint:: to_str ( i, 10 ) , i) ;
115
103
}
@@ -121,6 +109,158 @@ fn str_benchmarks<M: map::Map<~str, uint>>(make_map: fn() -> M,
121
109
}
122
110
}
123
111
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
+
124
264
fn write_header ( header : & str ) {
125
265
io:: stdout ( ) . write_str ( header) ;
126
266
io:: stdout ( ) . write_str ( "\n " ) ;
@@ -167,22 +307,24 @@ fn main() {
167
307
{
168
308
let rng = rand:: seeded_rng ( & seed) ;
169
309
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) ;
175
321
}
176
322
177
323
{
178
324
let rng = rand:: seeded_rng ( & seed) ;
179
325
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) ;
187
329
}
188
330
}
0 commit comments