blob: 6fb6b2dc2d876347fc950834b5467296f767923d [file] [log] [blame] [edit]
use std::cell::RefCell;
use std::collections::HashMap;
use criterion::{Criterion, black_box, criterion_group, criterion_main};
use stringdex::internals::tree::encode_search_tree_ukkonen;
use stringdex::internals::write_tree;
pub fn write_tree_words_mini(c: &mut Criterion) {
let dataset = std::fs::read("words.mini")
.or_else(|_| std::fs::read("benches/words.mini"))
.unwrap();
let dataset: Vec<&[u8]> = dataset.split(|c| *c == b'\n').collect();
let tree = encode_search_tree_ukkonen(dataset.iter().map(|x| &x[..]));
c.bench_function("write_tree_mini", |b| {
b.iter(|| {
let hm = RefCell::new(HashMap::new());
write_tree(
black_box(&tree),
&mut |filename, bytes| {
hm.borrow_mut()
.insert(filename.to_owned(), bytes.to_owned());
black_box({
(filename, bytes);
Ok(())
})
},
&mut |filename| Ok(hm.borrow().get(filename).cloned()),
)
})
});
}
pub fn write_tree_words(c: &mut Criterion) {
let dataset = std::fs::read("words")
.or_else(|_| std::fs::read("benches/words"))
.unwrap();
let dataset: Vec<&[u8]> = dataset.split(|c| *c == b'\n').collect();
let tree = encode_search_tree_ukkonen(dataset.iter().map(|x| &x[..]));
c.bench_function("write_tree_mini", |b| {
b.iter(|| {
let hm = RefCell::new(HashMap::new());
write_tree(
black_box(&tree),
&mut |filename, bytes| {
hm.borrow_mut()
.insert(filename.to_owned(), bytes.to_owned());
black_box({
(filename, bytes);
Ok(())
})
},
&mut |filename| Ok(hm.borrow().get(filename).cloned()),
)
})
});
}
criterion_group!(benches, write_tree_words_mini, write_tree_words);
criterion_main!(benches);