about summary refs log tree commit diff
path: root/src/libstd/benches
diff options
context:
space:
mode:
authorStein Somers <git@steinsomers.be>2019-11-14 00:32:36 +0100
committerStein Somers <git@steinsomers.be>2019-11-14 12:59:35 +0100
commit4decb58a64fd3d0a0da5cbea4a77327996cbe44a (patch)
tree0eaf1df1090833002a4e3539eefd9ac2337d64e9 /src/libstd/benches
parenta2491ee4e6c74451371aee8f4a2a5786d7a35406 (diff)
downloadrust-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.rs103
-rw-r--r--src/libstd/benches/hash/mod.rs2
-rw-r--r--src/libstd/benches/hash/set_ops.rs42
-rw-r--r--src/libstd/benches/lib.rs5
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;