Skip to content

Commit 7123a27

Browse files
committed
Restore long_haystack benchmarks and add random_haystack benchmarks
See #26
1 parent 5b81815 commit 7123a27

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

bench/benches/i386.rs

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
170181
criterion_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")]
177188
criterion_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

Comments
 (0)