diff options
| author | Alexis Beingessner <a.beingessner@gmail.com> | 2014-10-04 18:57:03 -0400 |
|---|---|---|
| committer | Alexis Beingessner <a.beingessner@gmail.com> | 2014-10-05 13:35:16 -0400 |
| commit | 79c21d9e7950e0ad16e0babeb040143419da31ef (patch) | |
| tree | 5c1e4cf7cd5cf0d8316b5f402e579a684a5fce88 | |
| parent | a2e7c4da9b331d337fba0b3911c6d3d7f48e8305 (diff) | |
| download | rust-79c21d9e7950e0ad16e0babeb040143419da31ef.tar.gz rust-79c21d9e7950e0ad16e0babeb040143419da31ef.zip | |
adding iterator benches to tree-based maps for comparison purposes
| -rw-r--r-- | src/libcollections/btree/map.rs | 35 | ||||
| -rw-r--r-- | src/libcollections/treemap.rs | 35 | ||||
| -rw-r--r-- | src/libcollections/trie.rs | 40 |
3 files changed, 92 insertions, 18 deletions
diff --git a/src/libcollections/btree/map.rs b/src/libcollections/btree/map.rs index ab160595433..956c3279d04 100644 --- a/src/libcollections/btree/map.rs +++ b/src/libcollections/btree/map.rs @@ -1145,9 +1145,12 @@ mod test { #[cfg(test)] mod bench { - use test::Bencher; + use std::prelude::*; + use std::rand::{weak_rng, Rng}; + use test::{Bencher, black_box}; use super::BTreeMap; + use MutableMap; use deque::bench::{insert_rand_n, insert_seq_n, find_rand_n, find_seq_n}; #[bench] @@ -1200,4 +1203,34 @@ mod bench { let mut m : BTreeMap<uint,uint> = BTreeMap::new(); find_seq_n(10_000, &mut m, b); } + + fn bench_iter(b: &mut Bencher, size: uint) { + let mut map = BTreeMap::<uint, uint>::new(); + let mut rng = weak_rng(); + + for _ in range(0, size) { + map.swap(rng.gen(), rng.gen()); + } + + b.iter(|| { + for entry in map.iter() { + black_box(entry); + } + }); + } + + #[bench] + pub fn iter_20(b: &mut Bencher) { + bench_iter(b, 20); + } + + #[bench] + pub fn iter_1000(b: &mut Bencher) { + bench_iter(b, 1000); + } + + #[bench] + pub fn iter_100000(b: &mut Bencher) { + bench_iter(b, 100000); + } } diff --git a/src/libcollections/treemap.rs b/src/libcollections/treemap.rs index 73e2d846654..a86e7386edd 100644 --- a/src/libcollections/treemap.rs +++ b/src/libcollections/treemap.rs @@ -2232,9 +2232,12 @@ mod test_treemap { #[cfg(test)] mod bench { - use test::Bencher; + use std::prelude::*; + use std::rand::{weak_rng, Rng}; + use test::{Bencher, black_box}; use super::TreeMap; + use MutableMap; use deque::bench::{insert_rand_n, insert_seq_n, find_rand_n, find_seq_n}; // Find seq @@ -2288,6 +2291,36 @@ mod bench { let mut m : TreeMap<uint,uint> = TreeMap::new(); find_seq_n(10_000, &mut m, b); } + + fn bench_iter(b: &mut Bencher, size: uint) { + let mut map = TreeMap::<uint, uint>::new(); + let mut rng = weak_rng(); + + for _ in range(0, size) { + map.swap(rng.gen(), rng.gen()); + } + + b.iter(|| { + for entry in map.iter() { + black_box(entry); + } + }); + } + + #[bench] + pub fn iter_20(b: &mut Bencher) { + bench_iter(b, 20); + } + + #[bench] + pub fn iter_1000(b: &mut Bencher) { + bench_iter(b, 1000); + } + + #[bench] + pub fn iter_100000(b: &mut Bencher) { + bench_iter(b, 100000); + } } #[cfg(test)] diff --git a/src/libcollections/trie.rs b/src/libcollections/trie.rs index e9981790f7d..63bb8b0c53c 100644 --- a/src/libcollections/trie.rs +++ b/src/libcollections/trie.rs @@ -948,8 +948,8 @@ macro_rules! iterator_impl { // rules, and are just manipulating raw pointers like there's no // such thing as invalid pointers and memory unsafety. The // reason is performance, without doing this we can get the - // bench_iter_large microbenchmark down to about 30000 ns/iter - // (using .unsafe_get to index self.stack directly, 38000 + // (now replaced) bench_iter_large microbenchmark down to about + // 30000 ns/iter (using .unsafe_get to index self.stack directly, 38000 // ns/iter with [] checked indexing), but this smashes that down // to 13500 ns/iter. // @@ -1458,31 +1458,39 @@ mod test_map { mod bench_map { use std::prelude::*; use std::rand::{weak_rng, Rng}; - use test::Bencher; + use test::{Bencher, black_box}; use MutableMap; use super::TrieMap; - #[bench] - fn bench_iter_small(b: &mut Bencher) { - let mut m = TrieMap::<uint>::new(); + fn bench_iter(b: &mut Bencher, size: uint) { + let mut map = TrieMap::<uint>::new(); let mut rng = weak_rng(); - for _ in range(0u, 20) { - m.insert(rng.gen(), rng.gen()); + + for _ in range(0, size) { + map.swap(rng.gen(), rng.gen()); } - b.iter(|| for _ in m.iter() {}) + b.iter(|| { + for entry in map.iter() { + black_box(entry); + } + }); } #[bench] - fn bench_iter_large(b: &mut Bencher) { - let mut m = TrieMap::<uint>::new(); - let mut rng = weak_rng(); - for _ in range(0u, 1000) { - m.insert(rng.gen(), rng.gen()); - } + pub fn iter_20(b: &mut Bencher) { + bench_iter(b, 20); + } - b.iter(|| for _ in m.iter() {}) + #[bench] + pub fn iter_1000(b: &mut Bencher) { + bench_iter(b, 1000); + } + + #[bench] + pub fn iter_100000(b: &mut Bencher) { + bench_iter(b, 100000); } #[bench] |
