1 // Copyright 2017 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.
12 use std::iter::Iterator;
14 use std::collections::BTreeMap;
15 use std::__rand::{Rng, thread_rng};
16 use test::{Bencher, black_box};
18 macro_rules! map_insert_rand_bench {
19 ($name: ident, $n: expr, $map: ident) => (
21 pub fn $name(b: &mut Bencher) {
23 let mut map = $map::new();
25 let mut rng = thread_rng();
28 let i = rng.gen::<usize>() % n;
34 let k = rng.gen::<usize>() % n;
43 macro_rules! map_insert_seq_bench {
44 ($name: ident, $n: expr, $map: ident) => (
46 pub fn $name(b: &mut Bencher) {
47 let mut map = $map::new();
51 map.insert(i * 2, i * 2);
66 macro_rules! map_find_rand_bench {
67 ($name: ident, $n: expr, $map: ident) => (
69 pub fn $name(b: &mut Bencher) {
70 let mut map = $map::new();
74 let mut rng = thread_rng();
75 let mut keys: Vec<_> = (0..n).map(|_| rng.gen::<usize>() % n).collect();
81 rng.shuffle(&mut keys);
86 let t = map.get(&keys[i]);
94 macro_rules! map_find_seq_bench {
95 ($name: ident, $n: expr, $map: ident) => (
97 pub fn $name(b: &mut Bencher) {
98 let mut map = $map::new();
117 map_insert_rand_bench!{insert_rand_100, 100, BTreeMap}
118 map_insert_rand_bench!{insert_rand_10_000, 10_000, BTreeMap}
120 map_insert_seq_bench!{insert_seq_100, 100, BTreeMap}
121 map_insert_seq_bench!{insert_seq_10_000, 10_000, BTreeMap}
123 map_find_rand_bench!{find_rand_100, 100, BTreeMap}
124 map_find_rand_bench!{find_rand_10_000, 10_000, BTreeMap}
126 map_find_seq_bench!{find_seq_100, 100, BTreeMap}
127 map_find_seq_bench!{find_seq_10_000, 10_000, BTreeMap}
129 fn bench_iter(b: &mut Bencher, size: i32) {
130 let mut map = BTreeMap::<i32, i32>::new();
131 let mut rng = thread_rng();
134 map.insert(rng.gen(), rng.gen());
145 pub fn iter_20(b: &mut Bencher) {
150 pub fn iter_1000(b: &mut Bencher) {
155 pub fn iter_100000(b: &mut Bencher) {
156 bench_iter(b, 100000);