summaryrefslogtreecommitdiffstats
path: root/third_party/rust/mapped_hyph/benches/bench.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/mapped_hyph/benches/bench.rs')
-rw-r--r--third_party/rust/mapped_hyph/benches/bench.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/third_party/rust/mapped_hyph/benches/bench.rs b/third_party/rust/mapped_hyph/benches/bench.rs
new file mode 100644
index 0000000000..cf4ad6cb2f
--- /dev/null
+++ b/third_party/rust/mapped_hyph/benches/bench.rs
@@ -0,0 +1,50 @@
+// Any copyright to the test code below is dedicated to the Public Domain.
+// http://creativecommons.org/publicdomain/zero/1.0/
+
+use criterion::black_box;
+use criterion::criterion_group;
+use criterion::criterion_main;
+use criterion::BenchmarkId;
+use criterion::Criterion;
+
+use mapped_hyph::Hyphenator;
+use std::fs;
+
+const SAMPLE_SIZE: usize = 300;
+const DIC_PATH: &str = "hyph_en_US.hyf";
+
+fn bench_construct(c: &mut Criterion) {
+ c.bench_function("construct", |b| {
+ b.iter(|| {
+ let dic = unsafe { mapped_hyph::load_file(DIC_PATH) }
+ .expect(&format!("failed to load dictionary {}", DIC_PATH));
+ let _ = Hyphenator::new(black_box(&*dic));
+ })
+ });
+}
+
+fn bench_find_hyphen_values(c: &mut Criterion) {
+ // XXX: Should we copy this file to the crate to ensure reproducability?
+ let data = fs::read_to_string("/usr/share/dict/words").expect("File reading failed.");
+ let words: Vec<&str> = data.lines().take(SAMPLE_SIZE).collect();
+
+ let dic = unsafe { mapped_hyph::load_file(DIC_PATH) }
+ .expect(&format!("failed to load dictionary {}", DIC_PATH));
+ let hyph = Hyphenator::new(&*dic);
+
+ c.bench_with_input(
+ BenchmarkId::new("bench_word", SAMPLE_SIZE),
+ &words,
+ |b, words| {
+ b.iter(|| {
+ let mut values: Vec<u8> = vec![0; 1000];
+ for w in words {
+ hyph.find_hyphen_values(&w, &mut values);
+ }
+ });
+ },
+ );
+}
+
+criterion_group!(benches, bench_construct, bench_find_hyphen_values,);
+criterion_main!(benches);