| use criterion::{black_box, criterion_group, criterion_main, Criterion}; |
| use rand::{Rng, SeedableRng}; |
| use ruzstd::decoding::bit_reader_reverse::BitReaderReversed; |
| |
| fn do_all_accesses(br: &mut BitReaderReversed, accesses: &[u8]) -> u64 { |
| let mut sum = 0; |
| for x in accesses { |
| sum += br.get_bits(*x); |
| } |
| let _ = black_box(br); |
| sum |
| } |
| |
| fn criterion_benchmark(c: &mut Criterion) { |
| const DATA_SIZE: usize = 1024 * 1024; |
| |
| let mut rng = rand::rngs::SmallRng::seed_from_u64(0xDEADBEEF); |
| let mut rand_vec = vec![]; |
| for _ in 0..DATA_SIZE { |
| rand_vec.push(rng.gen()); |
| } |
| |
| let mut access_vec = vec![]; |
| let mut br = BitReaderReversed::new(&rand_vec); |
| while br.bits_remaining() > 0 { |
| let x = rng.gen_range(0..20); |
| br.get_bits(x); |
| access_vec.push(x); |
| } |
| |
| c.bench_function("reversed bitreader", |b| { |
| b.iter(|| { |
| br.reset(&rand_vec); |
| do_all_accesses(&mut br, &access_vec) |
| }) |
| }); |
| } |
| |
| criterion_group!(benches, criterion_benchmark); |
| criterion_main!(benches); |