use bitbuffer::{BigEndian, BitWriteStream, Endianness, LittleEndian};
use iai_callgrind::{library_benchmark, library_benchmark_group, main};
use std::hint::black_box;
fn create_output<E: Endianness>(bit_size: usize, endianness: E) -> (E, Vec<u8>, usize) {
(
endianness,
Vec::with_capacity(bit_size.next_power_of_two() / 8 * 128),
bit_size,
)
}
#[library_benchmark(setup = create_output)]
#[bench::le_small(7, LittleEndian)]
#[bench::be_small(7, BigEndian)]
#[bench::le_medium(15, LittleEndian)]
#[bench::be_medoim(15, BigEndian)]
#[bench::le_large(57, LittleEndian)]
#[bench::be_large(57, BigEndian)]
fn write_int_le<E: Endianness>((endianness, mut out, bit_size): (E, Vec<u8>, usize)) {
{
let mut write = BitWriteStream::new(&mut out, endianness);
for i in 0..128 {
write.write_sized(&black_box(i as u64), bit_size).unwrap();
}
}
black_box(out);
}
library_benchmark_group!(
name = bench_write_group;
benchmarks = write_int_le
);
main!(library_benchmark_groups = bench_write_group);