1 // Copyright 2013 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.
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.
11 #![feature(std_misc, rand, duration, duration_span)]
13 use std
::collections
::{BTreeMap, HashMap, HashSet}
;
15 use std
::__rand
::{Rng, thread_rng}
;
16 use std
::time
::Duration
;
18 fn timed
<F
>(label
: &str, f
: F
) where F
: FnMut() {
19 println
!(" {}: {:?}", label
, Duration
::span(f
));
23 fn insert(&mut self, k
: usize, v
: usize);
24 fn remove(&mut self, k
: &usize) -> bool
;
25 fn find(&self, k
: &usize) -> Option
<&usize>;
28 impl MutableMap
for BTreeMap
<usize, usize> {
29 fn insert(&mut self, k
: usize, v
: usize) { self.insert(k, v); }
30 fn remove(&mut self, k
: &usize) -> bool { self.remove(k).is_some() }
31 fn find(&self, k
: &usize) -> Option
<&usize> { self.get(k) }
33 impl MutableMap
for HashMap
<usize, usize> {
34 fn insert(&mut self, k
: usize, v
: usize) { self.insert(k, v); }
35 fn remove(&mut self, k
: &usize) -> bool { self.remove(k).is_some() }
36 fn find(&self, k
: &usize) -> Option
<&usize> { self.get(k) }
39 fn ascending
<M
: MutableMap
>(map
: &mut M
, n_keys
: usize) {
40 println
!(" Ascending integers:");
50 assert_eq
!(map
.find(&i
).unwrap(), &(i
+ 1));
56 assert
!(map
.remove(&i
));
61 fn descending
<M
: MutableMap
>(map
: &mut M
, n_keys
: usize) {
62 println
!(" Descending integers:");
65 for i
in (0..n_keys
).rev() {
71 for i
in (0..n_keys
).rev() {
72 assert_eq
!(map
.find(&i
).unwrap(), &(i
+ 1));
78 assert
!(map
.remove(&i
));
83 fn vector
<M
: MutableMap
>(map
: &mut M
, n_keys
: usize, dist
: &[usize]) {
86 map
.insert(dist
[i
], i
+ 1);
92 assert_eq
!(map
.find(&dist
[i
]).unwrap(), &(i
+ 1));
98 assert
!(map
.remove(&dist
[i
]));
104 let mut args
= env
::args();
107 args
.nth(1).unwrap().parse
::<usize>().unwrap()
113 let mut rand
= Vec
::with_capacity(n_keys
);
116 let seed
: &[_
] = &[1, 1, 1, 1, 1, 1, 1];
117 let mut rng
= thread_rng();
118 let mut set
= HashSet
::new();
119 while set
.len() != n_keys
{
120 let next
= rng
.gen();
121 if set
.insert(next
) {
127 println
!("{} keys", n_keys
);
130 println
!("{}", "\nBTreeMap:");
133 let mut map
: BTreeMap
<usize,usize> = BTreeMap
::new();
134 ascending(&mut map
, n_keys
);
138 let mut map
: BTreeMap
<usize,usize> = BTreeMap
::new();
139 descending(&mut map
, n_keys
);
143 println
!(" Random integers:");
144 let mut map
: BTreeMap
<usize,usize> = BTreeMap
::new();
145 vector(&mut map
, n_keys
, &rand
);
149 println
!("{}", "\nHashMap:");
152 let mut map
: HashMap
<usize,usize> = HashMap
::new();
153 ascending(&mut map
, n_keys
);
157 let mut map
: HashMap
<usize,usize> = HashMap
::new();
158 descending(&mut map
, n_keys
);
162 println
!(" Random integers:");
163 let mut map
: HashMap
<usize,usize> = HashMap
::new();
164 vector(&mut map
, n_keys
, &rand
);