]> git.lizzy.rs Git - rust.git/commitdiff
Add benchmarks of drain_filter-like behaviour
authorStein Somers <git@steinsomers.be>
Sun, 2 Feb 2020 11:11:41 +0000 (12:11 +0100)
committerStein Somers <git@steinsomers.be>
Sun, 29 Mar 2020 14:05:53 +0000 (16:05 +0200)
src/liballoc/benches/btree/set.rs

index d9e75ab7fa4ef6cefd68e85afea59bae35e149ad..c4712e2132f786eaaa54a28de7517cd44d69c6cf 100644 (file)
@@ -62,6 +62,18 @@ pub fn clone_100_and_clear(b: &mut Bencher) {
     b.iter(|| src.clone().clear())
 }
 
+#[bench]
+pub fn clone_100_and_drain_half(b: &mut Bencher) {
+    let src = pos(100);
+    b.iter(|| {
+        let mut set = src.clone();
+        for i in set.iter().copied().filter(|i| i % 2 == 0).collect::<Vec<_>>() {
+            set.remove(&i);
+        }
+        assert_eq!(set.len(), 100 / 2);
+    })
+}
+
 #[bench]
 pub fn clone_100_and_into_iter(b: &mut Bencher) {
     let src = pos(100);
@@ -115,6 +127,18 @@ pub fn clone_10k_and_clear(b: &mut Bencher) {
     b.iter(|| src.clone().clear())
 }
 
+#[bench]
+pub fn clone_10k_and_drain_half(b: &mut Bencher) {
+    let src = pos(10_000);
+    b.iter(|| {
+        let mut set = src.clone();
+        for i in set.iter().copied().filter(|i| i % 2 == 0).collect::<Vec<_>>() {
+            set.remove(&i);
+        }
+        assert_eq!(set.len(), 10_000 / 2);
+    })
+}
+
 #[bench]
 pub fn clone_10k_and_into_iter(b: &mut Bencher) {
     let src = pos(10_000);