Skip to content

Commit 467b299

Browse files
committed
update str.contains benchmarks
1 parent 4844e51 commit 467b299

File tree

1 file changed

+54
-3
lines changed

1 file changed

+54
-3
lines changed

library/alloc/benches/str.rs

+54-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use core::iter::Iterator;
12
use test::{black_box, Bencher};
23

34
#[bench]
@@ -122,14 +123,13 @@ fn bench_contains_short_short(b: &mut Bencher) {
122123
let haystack = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
123124
let needle = "sit";
124125

126+
b.bytes = haystack.len() as u64;
125127
b.iter(|| {
126128
assert!(black_box(haystack).contains(black_box(needle)));
127129
})
128130
}
129131

130-
#[bench]
131-
fn bench_contains_short_long(b: &mut Bencher) {
132-
let haystack = "\
132+
static LONG_HAYSTACK: &str = "\
133133
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \
134134
ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis sed orci \
135135
eros. Suspendisse sit amet magna mollis, mollis nunc luctus, imperdiet mi. Integer fringilla non \
@@ -164,8 +164,46 @@ feugiat. Etiam quis mauris vel risus luctus mattis a a nunc. Nullam orci quam, i
164164
vehicula in, porttitor ut nibh. Duis sagittis adipiscing nisl vitae congue. Donec mollis risus eu \
165165
leo suscipit, varius porttitor nulla porta. Pellentesque ut sem nec nisi euismod vehicula. Nulla \
166166
malesuada sollicitudin quam eu fermentum.";
167+
168+
#[bench]
169+
fn bench_contains_2b_repeated_long(b: &mut Bencher) {
170+
let haystack = LONG_HAYSTACK;
171+
let needle = "::";
172+
173+
b.bytes = haystack.len() as u64;
174+
b.iter(|| {
175+
assert!(!black_box(haystack).contains(black_box(needle)));
176+
})
177+
}
178+
179+
#[bench]
180+
fn bench_contains_short_long(b: &mut Bencher) {
181+
let haystack = LONG_HAYSTACK;
167182
let needle = "english";
168183

184+
b.bytes = haystack.len() as u64;
185+
b.iter(|| {
186+
assert!(!black_box(haystack).contains(black_box(needle)));
187+
})
188+
}
189+
190+
#[bench]
191+
fn bench_contains_16b_in_long(b: &mut Bencher) {
192+
let haystack = LONG_HAYSTACK;
193+
let needle = "english language";
194+
195+
b.bytes = haystack.len() as u64;
196+
b.iter(|| {
197+
assert!(!black_box(haystack).contains(black_box(needle)));
198+
})
199+
}
200+
201+
#[bench]
202+
fn bench_contains_32b_in_long(b: &mut Bencher) {
203+
let haystack = LONG_HAYSTACK;
204+
let needle = "the english language sample text";
205+
206+
b.bytes = haystack.len() as u64;
169207
b.iter(|| {
170208
assert!(!black_box(haystack).contains(black_box(needle)));
171209
})
@@ -176,6 +214,18 @@ fn bench_contains_bad_naive(b: &mut Bencher) {
176214
let haystack = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
177215
let needle = "aaaaaaaab";
178216

217+
b.bytes = haystack.len() as u64;
218+
b.iter(|| {
219+
assert!(!black_box(haystack).contains(black_box(needle)));
220+
})
221+
}
222+
223+
#[bench]
224+
fn bench_contains_bad_simd(b: &mut Bencher) {
225+
let haystack = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
226+
let needle = "aaabaaaa";
227+
228+
b.bytes = haystack.len() as u64;
179229
b.iter(|| {
180230
assert!(!black_box(haystack).contains(black_box(needle)));
181231
})
@@ -186,6 +236,7 @@ fn bench_contains_equal(b: &mut Bencher) {
186236
let haystack = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
187237
let needle = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
188238

239+
b.bytes = haystack.len() as u64;
189240
b.iter(|| {
190241
assert!(black_box(haystack).contains(black_box(needle)));
191242
})

0 commit comments

Comments
 (0)