@@ -94,17 +94,20 @@ fn search_short_haystack<M: Measurement>(c: &mut Criterion<M>) {
9494 group. finish ( ) ;
9595}
9696
97- fn search_long_haystack < M : Measurement > ( c : & mut Criterion < M > ) {
98- let haystack = include_str ! ( "../../data/haystack" ) ;
99-
97+ fn search_haystack < M : Measurement > (
98+ c : & mut Criterion < M > ,
99+ name : & ' static str ,
100+ haystack : & ' static [ u8 ] ,
101+ ) {
100102 let needles = BufReader :: new ( File :: open ( "../data/words.txt" ) . unwrap ( ) )
101103 . lines ( )
102104 . map ( Result :: unwrap)
103105 . collect :: < Vec < _ > > ( ) ;
104106
105- let mut group = c. benchmark_group ( "long_haystack" ) ;
107+ let mut group = c. benchmark_group ( name ) ;
106108
107109 group. bench_function ( "String::find" , |b| {
110+ let haystack = String :: from_utf8_lossy ( haystack) . into_owned ( ) ;
108111 b. iter ( || {
109112 for needle in & needles {
110113 black_box ( haystack. find ( needle) ) ;
@@ -120,15 +123,15 @@ fn search_long_haystack<M: Measurement>(c: &mut Criterion<M>) {
120123
121124 b. iter ( || {
122125 for searcher in & searchers {
123- black_box ( searcher. search_in ( haystack. as_bytes ( ) ) ) ;
126+ black_box ( searcher. search_in ( haystack) ) ;
124127 }
125128 } ) ;
126129 } ) ;
127130
128131 group. bench_function ( "twoway::find_bytes" , |b| {
129132 b. iter ( || {
130133 for needle in & needles {
131- black_box ( twoway:: find_bytes ( haystack. as_bytes ( ) , needle. as_bytes ( ) ) ) ;
134+ black_box ( twoway:: find_bytes ( haystack, needle. as_bytes ( ) ) ) ;
132135 }
133136 } ) ;
134137 } ) ;
@@ -141,9 +144,7 @@ fn search_long_haystack<M: Measurement>(c: &mut Criterion<M>) {
141144 group. bench_function ( "sse4_strstr::avx2_strstr_v2" , |b| {
142145 b. iter ( || {
143146 for needle in & needles {
144- black_box ( unsafe {
145- sse4_strstr:: avx2_strstr_v2 ( haystack. as_bytes ( ) , needle. as_bytes ( ) )
146- } ) ;
147+ black_box ( unsafe { sse4_strstr:: avx2_strstr_v2 ( haystack, needle. as_bytes ( ) ) } ) ;
147148 }
148149 } ) ;
149150 } ) ;
@@ -158,7 +159,7 @@ fn search_long_haystack<M: Measurement>(c: &mut Criterion<M>) {
158159
159160 b. iter ( || {
160161 for searcher in & searchers {
161- black_box ( unsafe { searcher. search_in ( haystack. as_bytes ( ) ) } ) ;
162+ black_box ( unsafe { searcher. search_in ( haystack) } ) ;
162163 }
163164 } ) ;
164165 } ) ;
@@ -167,17 +168,27 @@ fn search_long_haystack<M: Measurement>(c: &mut Criterion<M>) {
167168 group. finish ( ) ;
168169}
169170
171+ fn search_long_haystack < M : Measurement > ( c : & mut Criterion < M > ) {
172+ let haystack = include_bytes ! ( "../../data/i386.txt" ) ;
173+ search_haystack ( c, "long_haystack" , haystack)
174+ }
175+
176+ fn search_random_haystack < M : Measurement > ( c : & mut Criterion < M > ) {
177+ let haystack = include_bytes ! ( "../../data/haystack" ) ;
178+ search_haystack ( c, "random_haystack" , haystack)
179+ }
180+
170181criterion_group ! (
171182 name = i386_wall_time;
172183 config = Criterion :: default ( ) . with_measurement( WallTime ) ;
173- targets = search_short_haystack, search_long_haystack
184+ targets = search_short_haystack, search_long_haystack, search_random_haystack
174185) ;
175186
176187#[ cfg( target_os = "linux" ) ]
177188criterion_group ! (
178189 name = i386_perf_instructions;
179190 config = Criterion :: default ( ) . with_measurement( PerfMeasurement :: new( PerfMode :: Instructions ) ) ;
180- targets = search_short_haystack, search_long_haystack
191+ targets = search_short_haystack, search_long_haystack, search_random_haystack
181192) ;
182193
183194#[ cfg( target_os = "linux" ) ]
0 commit comments