diff options
| author | Stein Somers <git@steinsomers.be> | 2019-11-14 00:32:36 +0100 |
|---|---|---|
| committer | Stein Somers <git@steinsomers.be> | 2019-11-14 12:59:35 +0100 |
| commit | 4decb58a64fd3d0a0da5cbea4a77327996cbe44a (patch) | |
| tree | 0eaf1df1090833002a4e3539eefd9ac2337d64e9 /src/libstd/benches | |
| parent | a2491ee4e6c74451371aee8f4a2a5786d7a35406 (diff) | |
| download | rust-4decb58a64fd3d0a0da5cbea4a77327996cbe44a.tar.gz rust-4decb58a64fd3d0a0da5cbea4a77327996cbe44a.zip | |
introduce benchmarks of HashSet operations
Diffstat (limited to 'src/libstd/benches')
| -rw-r--r-- | src/libstd/benches/hash/map.rs | 103 | ||||
| -rw-r--r-- | src/libstd/benches/hash/mod.rs | 2 | ||||
| -rw-r--r-- | src/libstd/benches/hash/set_ops.rs | 42 | ||||
| -rw-r--r-- | src/libstd/benches/lib.rs | 5 |
4 files changed, 152 insertions, 0 deletions
diff --git a/src/libstd/benches/hash/map.rs b/src/libstd/benches/hash/map.rs new file mode 100644 index 00000000000..25425c5968e --- /dev/null +++ b/src/libstd/benches/hash/map.rs @@ -0,0 +1,103 @@ +#![cfg(test)] + +use test::Bencher; +use std::collections::HashMap; + +#[bench] +fn new_drop(b: &mut Bencher) { + b.iter(|| { + let m: HashMap<i32, i32> = HashMap::new(); + assert_eq!(m.len(), 0); + }) +} + +#[bench] +fn new_insert_drop(b: &mut Bencher) { + b.iter(|| { + let mut m = HashMap::new(); + m.insert(0, 0); + assert_eq!(m.len(), 1); + }) +} + +#[bench] +fn grow_by_insertion(b: &mut Bencher) { + let mut m = HashMap::new(); + + for i in 1..1001 { + m.insert(i, i); + } + + let mut k = 1001; + + b.iter(|| { + m.insert(k, k); + k += 1; + }); +} + +#[bench] +fn find_existing(b: &mut Bencher) { + let mut m = HashMap::new(); + + for i in 1..1001 { + m.insert(i, i); + } + + b.iter(|| { + for i in 1..1001 { + m.contains_key(&i); + } + }); +} + +#[bench] +fn find_nonexisting(b: &mut Bencher) { + let mut m = HashMap::new(); + + for i in 1..1001 { + m.insert(i, i); + } + + b.iter(|| { + for i in 1001..2001 { + m.contains_key(&i); + } + }); +} + +#[bench] +fn hashmap_as_queue(b: &mut Bencher) { + let mut m = HashMap::new(); + + for i in 1..1001 { + m.insert(i, i); + } + + let mut k = 1; + + b.iter(|| { + m.remove(&k); + m.insert(k + 1000, k + 1000); + k += 1; + }); +} + +#[bench] +fn get_remove_insert(b: &mut Bencher) { + let mut m = HashMap::new(); + + for i in 1..1001 { + m.insert(i, i); + } + + let mut k = 1; + + b.iter(|| { + m.get(&(k + 400)); + m.get(&(k + 2000)); + m.remove(&k); + m.insert(k + 1000, k + 1000); + k += 1; + }) +} diff --git a/src/libstd/benches/hash/mod.rs b/src/libstd/benches/hash/mod.rs new file mode 100644 index 00000000000..42401a21b76 --- /dev/null +++ b/src/libstd/benches/hash/mod.rs @@ -0,0 +1,2 @@ +mod map; +mod set_ops; diff --git a/src/libstd/benches/hash/set_ops.rs b/src/libstd/benches/hash/set_ops.rs new file mode 100644 index 00000000000..1a4c4a66ee9 --- /dev/null +++ b/src/libstd/benches/hash/set_ops.rs @@ -0,0 +1,42 @@ +use std::collections::HashSet; +use test::Bencher; + +#[bench] +fn set_difference(b: &mut Bencher) { + let small: HashSet<_> = (0..10).collect(); + let large: HashSet<_> = (0..100).collect(); + + b.iter(|| small.difference(&large).count()); +} + +#[bench] +fn set_is_subset(b: &mut Bencher) { + let small: HashSet<_> = (0..10).collect(); + let large: HashSet<_> = (0..100).collect(); + + b.iter(|| small.is_subset(&large)); +} + +#[bench] +fn set_intersection(b: &mut Bencher) { + let small: HashSet<_> = (0..10).collect(); + let large: HashSet<_> = (0..100).collect(); + + b.iter(|| small.intersection(&large).count()); +} + +#[bench] +fn set_symmetric_difference(b: &mut Bencher) { + let small: HashSet<_> = (0..10).collect(); + let large: HashSet<_> = (0..100).collect(); + + b.iter(|| small.symmetric_difference(&large).count()); +} + +#[bench] +fn set_union(b: &mut Bencher) { + let small: HashSet<_> = (0..10).collect(); + let large: HashSet<_> = (0..100).collect(); + + b.iter(|| small.union(&large).count()); +} diff --git a/src/libstd/benches/lib.rs b/src/libstd/benches/lib.rs new file mode 100644 index 00000000000..4d1cf7fab7b --- /dev/null +++ b/src/libstd/benches/lib.rs @@ -0,0 +1,5 @@ +#![feature(test)] + +extern crate test; + +mod hash; |
