Skip to content

Commit b093ade

Browse files
committed
added a benchmark for the reversed bitreader to guide optimizations
1 parent c333f6d commit b093ade

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,11 @@ readme = "Readme.md"
1313
[dependencies]
1414
byteorder = "1.3.2"
1515
twox-hash = { version = "1.5.0", default-features = false }
16+
17+
[dev-dependencies]
18+
criterion = "0.3"
19+
rand = "*"
20+
21+
[[bench]]
22+
name = "reversedbitreader_bench"
23+
harness = false

benches/reversedbitreader_bench.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
2+
use rand::rngs::ThreadRng;
3+
use rand::Rng;
4+
use ruzstd::decoding::bit_reader_reverse::BitReaderReversed;
5+
6+
fn fibonacci(br: &mut BitReaderReversed, accesses: &[usize]) -> u64 {
7+
let mut sum = 0;
8+
for x in accesses {
9+
sum += br.get_bits(*x).unwrap() as u64;
10+
}
11+
let _ = black_box(br);
12+
sum
13+
}
14+
15+
fn criterion_benchmark(c: &mut Criterion) {
16+
let mut rng = rand::thread_rng();
17+
let mut rand_vec = vec![];
18+
for _ in 0..100000 {
19+
rand_vec.push(rng.gen());
20+
}
21+
22+
let mut access_vec = vec![];
23+
let mut br = BitReaderReversed::new(&rand_vec);
24+
while br.bits_remaining() > 0 {
25+
let x = rng.gen_range(1, 20);
26+
br.get_bits(x).unwrap();
27+
access_vec.push(x);
28+
}
29+
30+
c.bench_function("fib 20", |b| {
31+
b.iter(|| {
32+
br.reset(&rand_vec);
33+
fibonacci(&mut br, &access_vec)
34+
})
35+
});
36+
}
37+
38+
criterion_group!(benches, criterion_benchmark);
39+
criterion_main!(benches);

0 commit comments

Comments
 (0)