summaryrefslogtreecommitdiffstats
path: root/library/alloc/benches
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--library/alloc/benches/lib.rs2
-rw-r--r--library/alloc/benches/str.rs65
2 files changed, 60 insertions, 7 deletions
diff --git a/library/alloc/benches/lib.rs b/library/alloc/benches/lib.rs
index d418965cd..b25d63d83 100644
--- a/library/alloc/benches/lib.rs
+++ b/library/alloc/benches/lib.rs
@@ -5,7 +5,9 @@
#![feature(iter_next_chunk)]
#![feature(repr_simd)]
#![feature(slice_partition_dedup)]
+#![feature(strict_provenance)]
#![feature(test)]
+#![deny(fuzzy_provenance_casts)]
extern crate test;
diff --git a/library/alloc/benches/str.rs b/library/alloc/benches/str.rs
index 391475bc0..54af389de 100644
--- a/library/alloc/benches/str.rs
+++ b/library/alloc/benches/str.rs
@@ -1,3 +1,4 @@
+use core::iter::Iterator;
use test::{black_box, Bencher};
#[bench]
@@ -122,14 +123,13 @@ fn bench_contains_short_short(b: &mut Bencher) {
let haystack = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
let needle = "sit";
+ b.bytes = haystack.len() as u64;
b.iter(|| {
- assert!(haystack.contains(needle));
+ assert!(black_box(haystack).contains(black_box(needle)));
})
}
-#[bench]
-fn bench_contains_short_long(b: &mut Bencher) {
- let haystack = "\
+static LONG_HAYSTACK: &str = "\
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \
ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis sed orci \
eros. Suspendisse sit amet magna mollis, mollis nunc luctus, imperdiet mi. Integer fringilla non \
@@ -164,10 +164,48 @@ feugiat. Etiam quis mauris vel risus luctus mattis a a nunc. Nullam orci quam, i
vehicula in, porttitor ut nibh. Duis sagittis adipiscing nisl vitae congue. Donec mollis risus eu \
leo suscipit, varius porttitor nulla porta. Pellentesque ut sem nec nisi euismod vehicula. Nulla \
malesuada sollicitudin quam eu fermentum.";
+
+#[bench]
+fn bench_contains_2b_repeated_long(b: &mut Bencher) {
+ let haystack = LONG_HAYSTACK;
+ let needle = "::";
+
+ b.bytes = haystack.len() as u64;
+ b.iter(|| {
+ assert!(!black_box(haystack).contains(black_box(needle)));
+ })
+}
+
+#[bench]
+fn bench_contains_short_long(b: &mut Bencher) {
+ let haystack = LONG_HAYSTACK;
let needle = "english";
+ b.bytes = haystack.len() as u64;
+ b.iter(|| {
+ assert!(!black_box(haystack).contains(black_box(needle)));
+ })
+}
+
+#[bench]
+fn bench_contains_16b_in_long(b: &mut Bencher) {
+ let haystack = LONG_HAYSTACK;
+ let needle = "english language";
+
+ b.bytes = haystack.len() as u64;
+ b.iter(|| {
+ assert!(!black_box(haystack).contains(black_box(needle)));
+ })
+}
+
+#[bench]
+fn bench_contains_32b_in_long(b: &mut Bencher) {
+ let haystack = LONG_HAYSTACK;
+ let needle = "the english language sample text";
+
+ b.bytes = haystack.len() as u64;
b.iter(|| {
- assert!(!haystack.contains(needle));
+ assert!(!black_box(haystack).contains(black_box(needle)));
})
}
@@ -176,8 +214,20 @@ fn bench_contains_bad_naive(b: &mut Bencher) {
let haystack = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
let needle = "aaaaaaaab";
+ b.bytes = haystack.len() as u64;
+ b.iter(|| {
+ assert!(!black_box(haystack).contains(black_box(needle)));
+ })
+}
+
+#[bench]
+fn bench_contains_bad_simd(b: &mut Bencher) {
+ let haystack = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ let needle = "aaabaaaa";
+
+ b.bytes = haystack.len() as u64;
b.iter(|| {
- assert!(!haystack.contains(needle));
+ assert!(!black_box(haystack).contains(black_box(needle)));
})
}
@@ -186,8 +236,9 @@ fn bench_contains_equal(b: &mut Bencher) {
let haystack = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
let needle = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
+ b.bytes = haystack.len() as u64;
b.iter(|| {
- assert!(haystack.contains(needle));
+ assert!(black_box(haystack).contains(black_box(needle)));
})
}