introduce benchmarks of HashSet operations
This commit is contained in:
parent
a2491ee4e6
commit
4decb58a64
6 changed files with 52 additions and 21 deletions
|
@ -1,7 +1,7 @@
|
|||
use std::collections::BTreeSet;
|
||||
|
||||
use rand::{thread_rng, Rng};
|
||||
use test::{black_box, Bencher};
|
||||
use test::Bencher;
|
||||
|
||||
fn random(n: usize) -> BTreeSet<usize> {
|
||||
let mut rng = thread_rng();
|
||||
|
@ -31,7 +31,6 @@ fn pos(n: usize) -> BTreeSet<i32> {
|
|||
set
|
||||
}
|
||||
|
||||
|
||||
fn stagger(n1: usize, factor: usize) -> [BTreeSet<u32>; 2] {
|
||||
let n2 = n1 * factor;
|
||||
let mut sets = [BTreeSet::new(), BTreeSet::new()];
|
||||
|
@ -52,10 +51,7 @@ macro_rules! set_bench {
|
|||
let sets = $sets;
|
||||
|
||||
// measure
|
||||
b.iter(|| {
|
||||
let x = sets[0].$set_func(&sets[1]).$result_func();
|
||||
black_box(x);
|
||||
})
|
||||
b.iter(|| sets[0].$set_func(&sets[1]).$result_func())
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
#![cfg(test)]
|
||||
|
||||
use test::Bencher;
|
||||
use std::collections::HashMap;
|
||||
|
||||
#[bench]
|
||||
fn new_drop(b: &mut Bencher) {
|
||||
use super::map::HashMap;
|
||||
|
||||
b.iter(|| {
|
||||
let m: HashMap<i32, i32> = HashMap::new();
|
||||
assert_eq!(m.len(), 0);
|
||||
|
@ -14,8 +13,6 @@ fn new_drop(b: &mut Bencher) {
|
|||
|
||||
#[bench]
|
||||
fn new_insert_drop(b: &mut Bencher) {
|
||||
use super::map::HashMap;
|
||||
|
||||
b.iter(|| {
|
||||
let mut m = HashMap::new();
|
||||
m.insert(0, 0);
|
||||
|
@ -25,8 +22,6 @@ fn new_insert_drop(b: &mut Bencher) {
|
|||
|
||||
#[bench]
|
||||
fn grow_by_insertion(b: &mut Bencher) {
|
||||
use super::map::HashMap;
|
||||
|
||||
let mut m = HashMap::new();
|
||||
|
||||
for i in 1..1001 {
|
||||
|
@ -43,8 +38,6 @@ fn grow_by_insertion(b: &mut Bencher) {
|
|||
|
||||
#[bench]
|
||||
fn find_existing(b: &mut Bencher) {
|
||||
use super::map::HashMap;
|
||||
|
||||
let mut m = HashMap::new();
|
||||
|
||||
for i in 1..1001 {
|
||||
|
@ -60,8 +53,6 @@ fn find_existing(b: &mut Bencher) {
|
|||
|
||||
#[bench]
|
||||
fn find_nonexisting(b: &mut Bencher) {
|
||||
use super::map::HashMap;
|
||||
|
||||
let mut m = HashMap::new();
|
||||
|
||||
for i in 1..1001 {
|
||||
|
@ -77,8 +68,6 @@ fn find_nonexisting(b: &mut Bencher) {
|
|||
|
||||
#[bench]
|
||||
fn hashmap_as_queue(b: &mut Bencher) {
|
||||
use super::map::HashMap;
|
||||
|
||||
let mut m = HashMap::new();
|
||||
|
||||
for i in 1..1001 {
|
||||
|
@ -96,8 +85,6 @@ fn hashmap_as_queue(b: &mut Bencher) {
|
|||
|
||||
#[bench]
|
||||
fn get_remove_insert(b: &mut Bencher) {
|
||||
use super::map::HashMap;
|
||||
|
||||
let mut m = HashMap::new();
|
||||
|
||||
for i in 1..1001 {
|
2
src/libstd/benches/hash/mod.rs
Normal file
2
src/libstd/benches/hash/mod.rs
Normal file
|
@ -0,0 +1,2 @@
|
|||
mod map;
|
||||
mod set_ops;
|
42
src/libstd/benches/hash/set_ops.rs
Normal file
42
src/libstd/benches/hash/set_ops.rs
Normal file
|
@ -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());
|
||||
}
|
5
src/libstd/benches/lib.rs
Normal file
5
src/libstd/benches/lib.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
#![feature(test)]
|
||||
|
||||
extern crate test;
|
||||
|
||||
mod hash;
|
|
@ -1,5 +1,4 @@
|
|||
//! Unordered containers, implemented as hash-tables
|
||||
|
||||
mod bench;
|
||||
pub mod map;
|
||||
pub mod set;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue