From e7e7a9f75a42ab0fa5fcebc9a74214a3d33a932f Mon Sep 17 00:00:00 2001 From: wcampbell Date: Tue, 27 Sep 2022 04:20:27 +0000 Subject: [PATCH] Add bits benchmark --- benches/deku.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/benches/deku.rs b/benches/deku.rs index 6bdcb437..bbaa2c3f 100644 --- a/benches/deku.rs +++ b/benches/deku.rs @@ -1,6 +1,14 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; use deku::prelude::*; +#[derive(Debug, PartialEq, DekuRead, DekuWrite)] +struct DekuBits { + #[deku(bits = "1")] + data_01: u8, + #[deku(bits = "7")] + data_02: u8, +} + #[derive(Debug, PartialEq, DekuRead, DekuWrite)] struct DekuByte { data: u8, @@ -20,6 +28,14 @@ struct DekuVec { data: Vec, } +fn deku_read_bits(input: &[u8]) { + let (_rest, _v) = DekuBits::from_bytes((input, 0)).unwrap(); +} + +fn deku_write_bits(input: &DekuBits) { + let _v = input.to_bytes().unwrap(); +} + fn deku_read_byte(input: &[u8]) { let (_rest, _v) = DekuByte::from_bytes((input, 0)).unwrap(); } @@ -51,6 +67,12 @@ fn criterion_benchmark(c: &mut Criterion) { c.bench_function("deku_write_byte", |b| { b.iter(|| deku_write_byte(black_box(&DekuByte { data: 0x01 }))) }); + c.bench_function("deku_read_bits", |b| { + b.iter(|| deku_read_bits(black_box([0xf1].as_ref()))) + }); + c.bench_function("deku_write_bits", |b| { + b.iter(|| deku_write_bits(black_box(&DekuBits { data_01: 0x0f, data_02: 0x01 }))) + }); c.bench_function("deku_read_enum", |b| { b.iter(|| deku_read_enum(black_box([0x01, 0x02].as_ref())))