1
+ use core:: iter:: Iterator ;
1
2
use test:: { black_box, Bencher } ;
2
3
3
4
#[ bench]
@@ -122,14 +123,13 @@ fn bench_contains_short_short(b: &mut Bencher) {
122
123
let haystack = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." ;
123
124
let needle = "sit" ;
124
125
126
+ b. bytes = haystack. len ( ) as u64 ;
125
127
b. iter ( || {
126
128
assert ! ( black_box( haystack) . contains( black_box( needle) ) ) ;
127
129
} )
128
130
}
129
131
130
- #[ bench]
131
- fn bench_contains_short_long ( b : & mut Bencher ) {
132
- let haystack = "\
132
+ static LONG_HAYSTACK : & str = "\
133
133
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \
134
134
ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis sed orci \
135
135
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
164
164
vehicula in, porttitor ut nibh. Duis sagittis adipiscing nisl vitae congue. Donec mollis risus eu \
165
165
leo suscipit, varius porttitor nulla porta. Pellentesque ut sem nec nisi euismod vehicula. Nulla \
166
166
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 ;
167
182
let needle = "english" ;
168
183
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 ;
169
207
b. iter ( || {
170
208
assert ! ( !black_box( haystack) . contains( black_box( needle) ) ) ;
171
209
} )
@@ -176,6 +214,18 @@ fn bench_contains_bad_naive(b: &mut Bencher) {
176
214
let haystack = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ;
177
215
let needle = "aaaaaaaab" ;
178
216
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 ;
179
229
b. iter ( || {
180
230
assert ! ( !black_box( haystack) . contains( black_box( needle) ) ) ;
181
231
} )
@@ -186,6 +236,7 @@ fn bench_contains_equal(b: &mut Bencher) {
186
236
let haystack = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." ;
187
237
let needle = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." ;
188
238
239
+ b. bytes = haystack. len ( ) as u64 ;
189
240
b. iter ( || {
190
241
assert ! ( black_box( haystack) . contains( black_box( needle) ) ) ;
191
242
} )
0 commit comments