1+ use core:: iter:: Iterator ;
12use 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