#![cfg(all(feature = "alloc", feature = "bits"))]
use core::convert::TryFrom;
use deku::bitvec::Lsb0;
use deku::prelude::*;
#[derive(PartialEq, Debug, DekuRead, DekuWrite)]
pub struct Test {
#[deku(bits = "4")]
pub a: u8,
#[deku(bits = "4")]
pub b: u8,
}
#[test]
fn test_to_bits_correct() {
let test_data: &[u8] = &[0xf1];
let test = Test::try_from(test_data).unwrap();
let bits = test.to_bits().unwrap();
assert_eq!(deku::bitvec::bitvec![1, 1, 1, 1, 0, 0, 0, 1], bits);
}
#[derive(PartialEq, Debug, DekuRead, DekuWrite)]
pub struct TestOver {
#[deku(bits = "4")]
pub a: u8,
#[deku(bits = "4")]
pub b: u8,
#[deku(bits = "1")]
pub c: u8,
}
#[test]
fn test_to_bits_correct_over() {
let test_data: &[u8] = &[0xf1, 0x80];
let test = TestOver::from_bytes((test_data, 0)).unwrap().1;
let bits = test.to_bits().unwrap();
assert_eq!(deku::bitvec::bitvec![1, 1, 1, 1, 0, 0, 0, 1, 1], bits);
}
#[derive(PartialEq, Debug, DekuRead, DekuWrite)]
#[deku(id_type = "u8", bits = "4")]
enum TestEnum {
#[deku(id = "0b1010")]
VarA,
}
#[cfg(feature = "bits")]
#[test]
fn test_to_bits_enum() {
let test_data: &[u8] = &[0b1010_0000];
let test = TestEnum::from_bytes((test_data, 0)).unwrap().1;
let bits = test.to_bits().unwrap();
assert_eq!(deku::bitvec::bitvec![1, 0, 1, 0], bits);
}