@@ -94,17 +94,20 @@ fn search_short_haystack<M: Measurement>(c: &mut Criterion<M>) {
94
94
group. finish ( ) ;
95
95
}
96
96
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
+ ) {
100
102
let needles = BufReader :: new ( File :: open ( "../data/words.txt" ) . unwrap ( ) )
101
103
. lines ( )
102
104
. map ( Result :: unwrap)
103
105
. collect :: < Vec < _ > > ( ) ;
104
106
105
- let mut group = c. benchmark_group ( "long_haystack" ) ;
107
+ let mut group = c. benchmark_group ( name ) ;
106
108
107
109
group. bench_function ( "String::find" , |b| {
110
+ let haystack = String :: from_utf8_lossy ( haystack) . into_owned ( ) ;
108
111
b. iter ( || {
109
112
for needle in & needles {
110
113
black_box ( haystack. find ( needle) ) ;
@@ -120,15 +123,15 @@ fn search_long_haystack<M: Measurement>(c: &mut Criterion<M>) {
120
123
121
124
b. iter ( || {
122
125
for searcher in & searchers {
123
- black_box ( searcher. search_in ( haystack. as_bytes ( ) ) ) ;
126
+ black_box ( searcher. search_in ( haystack) ) ;
124
127
}
125
128
} ) ;
126
129
} ) ;
127
130
128
131
group. bench_function ( "twoway::find_bytes" , |b| {
129
132
b. iter ( || {
130
133
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 ( ) ) ) ;
132
135
}
133
136
} ) ;
134
137
} ) ;
@@ -141,9 +144,7 @@ fn search_long_haystack<M: Measurement>(c: &mut Criterion<M>) {
141
144
group. bench_function ( "sse4_strstr::avx2_strstr_v2" , |b| {
142
145
b. iter ( || {
143
146
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 ( ) ) } ) ;
147
148
}
148
149
} ) ;
149
150
} ) ;
@@ -158,7 +159,7 @@ fn search_long_haystack<M: Measurement>(c: &mut Criterion<M>) {
158
159
159
160
b. iter ( || {
160
161
for searcher in & searchers {
161
- black_box ( unsafe { searcher. search_in ( haystack. as_bytes ( ) ) } ) ;
162
+ black_box ( unsafe { searcher. search_in ( haystack) } ) ;
162
163
}
163
164
} ) ;
164
165
} ) ;
@@ -167,17 +168,27 @@ fn search_long_haystack<M: Measurement>(c: &mut Criterion<M>) {
167
168
group. finish ( ) ;
168
169
}
169
170
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
+
170
181
criterion_group ! (
171
182
name = i386_wall_time;
172
183
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
174
185
) ;
175
186
176
187
#[ cfg( target_os = "linux" ) ]
177
188
criterion_group ! (
178
189
name = i386_perf_instructions;
179
190
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
181
192
) ;
182
193
183
194
#[ cfg( target_os = "linux" ) ]
0 commit comments