Skip to content

Commit 6b38373

Browse files
authored
Add words 100, 5K, and 15K benches (#44)
* Add words_{100, 5000, 15000} * Add memory benches
1 parent 8335137 commit 6b38373

File tree

5 files changed

+20335
-133
lines changed

5 files changed

+20335
-133
lines changed

bench/benches/benchmark.rs

+217-133
Original file line numberDiff line numberDiff line change
@@ -9,140 +9,209 @@ use criterion::{
99
};
1010

1111
const BUILD_SAMPLE_SIZE: usize = 10;
12-
const BUILD_WARM_UP_TIME: Duration = Duration::from_secs(5);
13-
const BUILD_MEASURE_TIME: Duration = Duration::from_secs(30);
12+
const BUILD_WARM_UP_TIME: Duration = Duration::from_millis(500);
13+
const BUILD_MEASURE_TIME: Duration = Duration::from_secs(2);
1414

1515
const SEARCH_SAMPLE_SIZE: usize = 30;
16-
const SEARCH_WARM_UP_TIME: Duration = Duration::from_secs(5);
17-
const SEARCH_MEASURE_TIME: Duration = Duration::from_secs(10);
18-
19-
fn criterion_unidic_build(c: &mut Criterion) {
20-
let mut group = c.benchmark_group("unidic/build");
21-
group.sample_size(BUILD_SAMPLE_SIZE);
22-
group.warm_up_time(BUILD_WARM_UP_TIME);
23-
group.measurement_time(BUILD_MEASURE_TIME);
24-
group.sampling_mode(SamplingMode::Flat);
25-
let mut patterns = load_file("data/unidic/unidic");
26-
patterns.sort_unstable();
27-
28-
add_build_benches(&mut group, &patterns);
16+
const SEARCH_WARM_UP_TIME: Duration = Duration::from_millis(500);
17+
const SEARCH_MEASURE_TIME: Duration = Duration::from_secs(2);
18+
19+
macro_rules! define_build_bench {
20+
( $func_name:ident, $group:literal, $corpus:literal ) => {
21+
fn $func_name(c: &mut Criterion) {
22+
let mut group = c.benchmark_group($group);
23+
group.sample_size(BUILD_SAMPLE_SIZE);
24+
group.warm_up_time(BUILD_WARM_UP_TIME);
25+
group.measurement_time(BUILD_MEASURE_TIME);
26+
group.sampling_mode(SamplingMode::Flat);
27+
let mut patterns = load_file($corpus);
28+
patterns.sort_unstable();
29+
add_build_benches(&mut group, &patterns);
30+
}
31+
};
2932
}
3033

31-
fn criterion_words100000_build(c: &mut Criterion) {
32-
let mut group = c.benchmark_group("words_100000/build");
33-
group.sample_size(BUILD_SAMPLE_SIZE);
34-
group.warm_up_time(BUILD_WARM_UP_TIME);
35-
group.measurement_time(BUILD_MEASURE_TIME);
36-
group.sampling_mode(SamplingMode::Flat);
37-
let mut patterns = load_file("data/words_100000");
38-
patterns.sort_unstable();
39-
40-
add_build_benches(&mut group, &patterns);
41-
}
42-
43-
fn criterion_unidic_find(c: &mut Criterion) {
44-
let mut group = c.benchmark_group("unidic/find");
45-
group.sample_size(SEARCH_SAMPLE_SIZE);
46-
group.warm_up_time(SEARCH_WARM_UP_TIME);
47-
group.measurement_time(SEARCH_MEASURE_TIME);
48-
group.sampling_mode(SamplingMode::Flat);
49-
let mut patterns = load_file("data/unidic/unidic");
50-
patterns.sort_unstable();
51-
let haystacks = load_file("data/wagahaiwa_nekodearu.txt");
52-
53-
add_find_benches(&mut group, &patterns, &haystacks);
54-
}
55-
56-
fn criterion_words100000_find(c: &mut Criterion) {
57-
let mut group = c.benchmark_group("words_100000/find");
58-
group.sample_size(SEARCH_SAMPLE_SIZE);
59-
group.warm_up_time(SEARCH_WARM_UP_TIME);
60-
group.measurement_time(SEARCH_MEASURE_TIME);
61-
group.sampling_mode(SamplingMode::Flat);
62-
let mut patterns = load_file("data/words_100000");
63-
patterns.sort_unstable();
64-
let haystacks = load_file("data/sherlock.txt");
65-
66-
add_find_benches(&mut group, &patterns, &haystacks);
34+
macro_rules! define_find_bench {
35+
( $func_name:ident, $bench:ident, $group:literal, $corpus:literal, $haystack:literal ) => {
36+
fn $func_name(c: &mut Criterion) {
37+
let mut group = c.benchmark_group($group);
38+
group.sample_size(SEARCH_SAMPLE_SIZE);
39+
group.warm_up_time(SEARCH_WARM_UP_TIME);
40+
group.measurement_time(SEARCH_MEASURE_TIME);
41+
group.sampling_mode(SamplingMode::Flat);
42+
let mut patterns = load_file($corpus);
43+
patterns.sort_unstable();
44+
let haystacks = load_file($haystack);
45+
$bench(&mut group, &patterns, &haystacks);
46+
}
47+
};
6748
}
6849

69-
fn criterion_unidic_find_overlapping(c: &mut Criterion) {
70-
let mut group = c.benchmark_group("unidic/find_overlapping");
71-
group.sample_size(SEARCH_SAMPLE_SIZE);
72-
group.warm_up_time(SEARCH_WARM_UP_TIME);
73-
group.measurement_time(SEARCH_MEASURE_TIME);
74-
group.sampling_mode(SamplingMode::Flat);
75-
let mut patterns = load_file("data/unidic/unidic");
76-
patterns.sort_unstable();
77-
let haystacks = load_file("data/wagahaiwa_nekodearu.txt");
78-
79-
add_find_overlapping_benches(&mut group, &patterns, &haystacks);
80-
}
81-
82-
fn criterion_words100000_find_overlapping(c: &mut Criterion) {
83-
let mut group = c.benchmark_group("words_100000/find_overlapping");
84-
group.sample_size(SEARCH_SAMPLE_SIZE);
85-
group.warm_up_time(SEARCH_WARM_UP_TIME);
86-
group.measurement_time(SEARCH_MEASURE_TIME);
87-
group.sampling_mode(SamplingMode::Flat);
88-
let mut patterns = load_file("data/words_100000");
89-
patterns.sort_unstable();
90-
let haystacks = load_file("data/sherlock.txt");
91-
92-
add_find_overlapping_benches(&mut group, &patterns, &haystacks);
93-
}
50+
define_build_bench!(criterion_unidic_build, "unidic/build", "data/unidic/unidic");
51+
define_build_bench!(
52+
criterion_words_100_build,
53+
"words_100/build",
54+
"data/words_100"
55+
);
56+
define_build_bench!(
57+
criterion_words_5000_build,
58+
"words_5000/build",
59+
"data/words_5000"
60+
);
61+
define_build_bench!(
62+
criterion_words_15000_build,
63+
"words_15000/build",
64+
"data/words_15000"
65+
);
66+
define_build_bench!(
67+
criterion_words_100000_build,
68+
"words_100000/build",
69+
"data/words_100000"
70+
);
9471

95-
fn criterion_unidic_leftmost_longest_find(c: &mut Criterion) {
96-
let mut group = c.benchmark_group("unidic/leftmost_longest_find");
97-
group.sample_size(SEARCH_SAMPLE_SIZE);
98-
group.warm_up_time(SEARCH_WARM_UP_TIME);
99-
group.measurement_time(SEARCH_MEASURE_TIME);
100-
group.sampling_mode(SamplingMode::Flat);
101-
let mut patterns = load_file("data/unidic/unidic");
102-
patterns.sort_unstable();
103-
let haystacks = load_file("data/wagahaiwa_nekodearu.txt");
104-
105-
add_leftmost_longest_find_benches(&mut group, &patterns, &haystacks);
106-
}
72+
define_find_bench!(
73+
criterion_unidic_find,
74+
add_find_benches,
75+
"unidic/find",
76+
"data/unidic/unidic",
77+
"data/wagahaiwa_nekodearu.txt"
78+
);
79+
define_find_bench!(
80+
criterion_words_100_find,
81+
add_find_benches,
82+
"words_100/find",
83+
"data/words_100",
84+
"data/sherlock.txt"
85+
);
86+
define_find_bench!(
87+
criterion_words_5000_find,
88+
add_find_benches,
89+
"words_5000/find",
90+
"data/words_5000",
91+
"data/sherlock.txt"
92+
);
93+
define_find_bench!(
94+
criterion_words_15000_find,
95+
add_find_benches,
96+
"words_15000/find",
97+
"data/words_15000",
98+
"data/sherlock.txt"
99+
);
100+
define_find_bench!(
101+
criterion_words_100000_find,
102+
add_find_benches,
103+
"words_100000/find",
104+
"data/words_100000",
105+
"data/sherlock.txt"
106+
);
107107

108-
fn criterion_words100000_leftmost_longest_find(c: &mut Criterion) {
109-
let mut group = c.benchmark_group("words_100000/leftmost_longest_find");
110-
group.sample_size(SEARCH_SAMPLE_SIZE);
111-
group.warm_up_time(SEARCH_WARM_UP_TIME);
112-
group.measurement_time(SEARCH_MEASURE_TIME);
113-
group.sampling_mode(SamplingMode::Flat);
114-
let mut patterns = load_file("data/words_100000");
115-
patterns.sort_unstable();
116-
let haystacks = load_file("data/sherlock.txt");
117-
118-
add_leftmost_longest_find_benches(&mut group, &patterns, &haystacks);
119-
}
108+
define_find_bench!(
109+
criterion_unidic_find_overlapping,
110+
add_find_overlapping_benches,
111+
"unidic/find_overlapping",
112+
"data/unidic/unidic",
113+
"data/wagahaiwa_nekodearu.txt"
114+
);
115+
define_find_bench!(
116+
criterion_words_100_find_overlapping,
117+
add_find_overlapping_benches,
118+
"words_100/find_overlapping",
119+
"data/words_100",
120+
"data/sherlock.txt"
121+
);
122+
define_find_bench!(
123+
criterion_words_5000_find_overlapping,
124+
add_find_overlapping_benches,
125+
"words_5000/find_overlapping",
126+
"data/words_5000",
127+
"data/sherlock.txt"
128+
);
129+
define_find_bench!(
130+
criterion_words_15000_find_overlapping,
131+
add_find_overlapping_benches,
132+
"words_15000/find_overlapping",
133+
"data/words_15000",
134+
"data/sherlock.txt"
135+
);
136+
define_find_bench!(
137+
criterion_words_100000_find_overlapping,
138+
add_find_overlapping_benches,
139+
"words_100000/find_overlapping",
140+
"data/words_100000",
141+
"data/sherlock.txt"
142+
);
120143

121-
fn criterion_unidic_leftmost_first_find(c: &mut Criterion) {
122-
let mut group = c.benchmark_group("unidic/leftmost_first_find");
123-
group.sample_size(SEARCH_SAMPLE_SIZE);
124-
group.warm_up_time(SEARCH_WARM_UP_TIME);
125-
group.measurement_time(SEARCH_MEASURE_TIME);
126-
group.sampling_mode(SamplingMode::Flat);
127-
let mut patterns = load_file("data/unidic/unidic");
128-
patterns.sort_unstable();
129-
let haystacks = load_file("data/wagahaiwa_nekodearu.txt");
130-
131-
add_leftmost_first_find_benches(&mut group, &patterns, &haystacks);
132-
}
144+
define_find_bench!(
145+
criterion_unidic_find_leftmost_longest,
146+
add_find_leftmost_longest_benches,
147+
"unidic/find_leftmost_longest",
148+
"data/unidic/unidic",
149+
"data/wagahaiwa_nekodearu.txt"
150+
);
151+
define_find_bench!(
152+
criterion_words_100_find_leftmost_longest,
153+
add_find_leftmost_longest_benches,
154+
"words_100/find_leftmost_longest",
155+
"data/words_100",
156+
"data/sherlock.txt"
157+
);
158+
define_find_bench!(
159+
criterion_words_5000_find_leftmost_longest,
160+
add_find_leftmost_longest_benches,
161+
"words_5000/find_leftmost_longest",
162+
"data/words_5000",
163+
"data/sherlock.txt"
164+
);
165+
define_find_bench!(
166+
criterion_words_15000_find_leftmost_longest,
167+
add_find_leftmost_longest_benches,
168+
"words_15000/find_leftmost_longest",
169+
"data/words_15000",
170+
"data/sherlock.txt"
171+
);
172+
define_find_bench!(
173+
criterion_words_100000_find_leftmost_longest,
174+
add_find_leftmost_longest_benches,
175+
"words_100000/find_leftmost_longest",
176+
"data/words_100000",
177+
"data/sherlock.txt"
178+
);
133179

134-
fn criterion_words100000_leftmost_first_find(c: &mut Criterion) {
135-
let mut group = c.benchmark_group("words_100000/leftmost_first_find");
136-
group.sample_size(SEARCH_SAMPLE_SIZE);
137-
group.warm_up_time(SEARCH_WARM_UP_TIME);
138-
group.measurement_time(SEARCH_MEASURE_TIME);
139-
group.sampling_mode(SamplingMode::Flat);
140-
let mut patterns = load_file("data/words_100000");
141-
patterns.sort_unstable();
142-
let haystacks = load_file("data/sherlock.txt");
143-
144-
add_leftmost_first_find_benches(&mut group, &patterns, &haystacks);
145-
}
180+
define_find_bench!(
181+
criterion_unidic_find_leftmost_first,
182+
add_find_leftmost_first_benches,
183+
"unidic/find_leftmost_first",
184+
"data/unidic/unidic",
185+
"data/wagahaiwa_nekodearu.txt"
186+
);
187+
define_find_bench!(
188+
criterion_words_100_find_leftmost_first,
189+
add_find_leftmost_first_benches,
190+
"words_100/find_leftmost_first",
191+
"data/words_100",
192+
"data/sherlock.txt"
193+
);
194+
define_find_bench!(
195+
criterion_words_5000_find_leftmost_first,
196+
add_find_leftmost_first_benches,
197+
"words_5000/find_leftmost_first",
198+
"data/words_5000",
199+
"data/sherlock.txt"
200+
);
201+
define_find_bench!(
202+
criterion_words_15000_find_leftmost_first,
203+
add_find_leftmost_first_benches,
204+
"words_15000/find_leftmost_first",
205+
"data/words_15000",
206+
"data/sherlock.txt"
207+
);
208+
define_find_bench!(
209+
criterion_words_100000_find_leftmost_first,
210+
add_find_leftmost_first_benches,
211+
"words_100000/find_leftmost_first",
212+
"data/words_100000",
213+
"data/sherlock.txt"
214+
);
146215

147216
fn add_build_benches(group: &mut BenchmarkGroup<WallTime>, patterns: &[String]) {
148217
group.bench_function("daachorse", |b| {
@@ -411,7 +480,7 @@ fn add_find_overlapping_benches(
411480
});
412481
}
413482

414-
fn add_leftmost_longest_find_benches(
483+
fn add_find_leftmost_longest_benches(
415484
group: &mut BenchmarkGroup<WallTime>,
416485
patterns: &[String],
417486
haystacks: &[String],
@@ -488,7 +557,7 @@ fn add_leftmost_longest_find_benches(
488557
});
489558
}
490559

491-
fn add_leftmost_first_find_benches(
560+
fn add_find_leftmost_first_benches(
492561
group: &mut BenchmarkGroup<WallTime>,
493562
patterns: &[String],
494563
haystacks: &[String],
@@ -605,13 +674,28 @@ criterion_group!(
605674
benches,
606675
criterion_unidic_find,
607676
criterion_unidic_find_overlapping,
608-
criterion_unidic_leftmost_longest_find,
609-
criterion_unidic_leftmost_first_find,
677+
criterion_unidic_find_leftmost_longest,
678+
criterion_unidic_find_leftmost_first,
679+
criterion_words_100_find,
680+
criterion_words_100_find_overlapping,
681+
criterion_words_100_find_leftmost_longest,
682+
criterion_words_100_find_leftmost_first,
683+
criterion_words_5000_find,
684+
criterion_words_5000_find_overlapping,
685+
criterion_words_5000_find_leftmost_longest,
686+
criterion_words_5000_find_leftmost_first,
687+
criterion_words_15000_find,
688+
criterion_words_15000_find_overlapping,
689+
criterion_words_15000_find_leftmost_longest,
690+
criterion_words_15000_find_leftmost_first,
691+
criterion_words_100000_find,
692+
criterion_words_100000_find_overlapping,
693+
criterion_words_100000_find_leftmost_longest,
694+
criterion_words_100000_find_leftmost_first,
610695
criterion_unidic_build,
611-
criterion_words100000_find,
612-
criterion_words100000_find_overlapping,
613-
criterion_words100000_leftmost_longest_find,
614-
criterion_words100000_leftmost_first_find,
615-
criterion_words100000_build,
696+
criterion_words_100_build,
697+
criterion_words_5000_build,
698+
criterion_words_15000_build,
699+
criterion_words_100000_build,
616700
);
617701
criterion_main!(benches);

0 commit comments

Comments
 (0)