Skip to content

Commit 4decb58

Browse files
committed
introduce benchmarks of HashSet operations
1 parent a2491ee commit 4decb58

File tree

6 files changed

+52
-21
lines changed

6 files changed

+52
-21
lines changed

src/liballoc/benches/btree/set.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::collections::BTreeSet;
22

33
use rand::{thread_rng, Rng};
4-
use test::{black_box, Bencher};
4+
use test::Bencher;
55

66
fn random(n: usize) -> BTreeSet<usize> {
77
let mut rng = thread_rng();
@@ -31,7 +31,6 @@ fn pos(n: usize) -> BTreeSet<i32> {
3131
set
3232
}
3333

34-
3534
fn stagger(n1: usize, factor: usize) -> [BTreeSet<u32>; 2] {
3635
let n2 = n1 * factor;
3736
let mut sets = [BTreeSet::new(), BTreeSet::new()];
@@ -52,10 +51,7 @@ macro_rules! set_bench {
5251
let sets = $sets;
5352

5453
// measure
55-
b.iter(|| {
56-
let x = sets[0].$set_func(&sets[1]).$result_func();
57-
black_box(x);
58-
})
54+
b.iter(|| sets[0].$set_func(&sets[1]).$result_func())
5955
}
6056
};
6157
}

src/libstd/collections/hash/bench.rs renamed to src/libstd/benches/hash/map.rs

+1-14
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
#![cfg(test)]
22

33
use test::Bencher;
4+
use std::collections::HashMap;
45

56
#[bench]
67
fn new_drop(b: &mut Bencher) {
7-
use super::map::HashMap;
8-
98
b.iter(|| {
109
let m: HashMap<i32, i32> = HashMap::new();
1110
assert_eq!(m.len(), 0);
@@ -14,8 +13,6 @@ fn new_drop(b: &mut Bencher) {
1413

1514
#[bench]
1615
fn new_insert_drop(b: &mut Bencher) {
17-
use super::map::HashMap;
18-
1916
b.iter(|| {
2017
let mut m = HashMap::new();
2118
m.insert(0, 0);
@@ -25,8 +22,6 @@ fn new_insert_drop(b: &mut Bencher) {
2522

2623
#[bench]
2724
fn grow_by_insertion(b: &mut Bencher) {
28-
use super::map::HashMap;
29-
3025
let mut m = HashMap::new();
3126

3227
for i in 1..1001 {
@@ -43,8 +38,6 @@ fn grow_by_insertion(b: &mut Bencher) {
4338

4439
#[bench]
4540
fn find_existing(b: &mut Bencher) {
46-
use super::map::HashMap;
47-
4841
let mut m = HashMap::new();
4942

5043
for i in 1..1001 {
@@ -60,8 +53,6 @@ fn find_existing(b: &mut Bencher) {
6053

6154
#[bench]
6255
fn find_nonexisting(b: &mut Bencher) {
63-
use super::map::HashMap;
64-
6556
let mut m = HashMap::new();
6657

6758
for i in 1..1001 {
@@ -77,8 +68,6 @@ fn find_nonexisting(b: &mut Bencher) {
7768

7869
#[bench]
7970
fn hashmap_as_queue(b: &mut Bencher) {
80-
use super::map::HashMap;
81-
8271
let mut m = HashMap::new();
8372

8473
for i in 1..1001 {
@@ -96,8 +85,6 @@ fn hashmap_as_queue(b: &mut Bencher) {
9685

9786
#[bench]
9887
fn get_remove_insert(b: &mut Bencher) {
99-
use super::map::HashMap;
100-
10188
let mut m = HashMap::new();
10289

10390
for i in 1..1001 {

src/libstd/benches/hash/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
mod map;
2+
mod set_ops;

src/libstd/benches/hash/set_ops.rs

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use std::collections::HashSet;
2+
use test::Bencher;
3+
4+
#[bench]
5+
fn set_difference(b: &mut Bencher) {
6+
let small: HashSet<_> = (0..10).collect();
7+
let large: HashSet<_> = (0..100).collect();
8+
9+
b.iter(|| small.difference(&large).count());
10+
}
11+
12+
#[bench]
13+
fn set_is_subset(b: &mut Bencher) {
14+
let small: HashSet<_> = (0..10).collect();
15+
let large: HashSet<_> = (0..100).collect();
16+
17+
b.iter(|| small.is_subset(&large));
18+
}
19+
20+
#[bench]
21+
fn set_intersection(b: &mut Bencher) {
22+
let small: HashSet<_> = (0..10).collect();
23+
let large: HashSet<_> = (0..100).collect();
24+
25+
b.iter(|| small.intersection(&large).count());
26+
}
27+
28+
#[bench]
29+
fn set_symmetric_difference(b: &mut Bencher) {
30+
let small: HashSet<_> = (0..10).collect();
31+
let large: HashSet<_> = (0..100).collect();
32+
33+
b.iter(|| small.symmetric_difference(&large).count());
34+
}
35+
36+
#[bench]
37+
fn set_union(b: &mut Bencher) {
38+
let small: HashSet<_> = (0..10).collect();
39+
let large: HashSet<_> = (0..100).collect();
40+
41+
b.iter(|| small.union(&large).count());
42+
}

src/libstd/benches/lib.rs

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#![feature(test)]
2+
3+
extern crate test;
4+
5+
mod hash;

src/libstd/collections/hash/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
//! Unordered containers, implemented as hash-tables
22
3-
mod bench;
43
pub mod map;
54
pub mod set;

0 commit comments

Comments
 (0)