88// option. This file may not be copied, modified, or distributed
99// except according to those terms.
1010
11- /*
12-
13-
14-
15- */
16-
1711extern mod std;
1812use std:: map;
19- use core :: mutable :: Mut ;
13+ use std :: treemap :: TreeMap ;
2014use core:: hashmap:: linear:: * ;
2115use 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+
124264fn 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