+use core::iter::Iterator;
use test::{black_box, Bencher};
#[bench]
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 \
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)));
})
}
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)));
})
}
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)));
})
}