use crate::{lib_bitfield, test_field};
lib_bitfield! {
pub TestBitfield(u32): u8 {
pub test_public: 4, 3;
test_private: 0;
}
}
impl TestBitfield {
pub const fn new() -> Self {
Self(0)
}
}
impl Default for TestBitfield {
fn default() -> Self {
Self::new()
}
}
lib_bitfield! {
pub TestMultiBitfield(MSB0 [u8; 16]): u16 {
pub test_public: 12, 7;
test_private7: 23;
test_private6: 22;
test_private5: 21;
test_private4: 20;
test_private3: 19;
test_private2: 18;
test_private1: 17;
test_private0: 16;
}
}
#[test]
fn test_bitfield() {
let mut bf = TestBitfield(0b01_1001);
assert_eq!(bf.test_public(), 3);
bf.set_test_public(2);
assert_eq!(bf.test_public(), 2);
assert_eq!(bf.bits(), (2 << 3) | 1);
test_field!(bf, test_private: 0);
}
#[test]
fn test_multi_bitfield() {
let bytes = [0x00; 16];
let mut mbf = TestMultiBitfield(bytes);
assert_eq!(mbf.bytes(), bytes);
mbf.set_test_public(0b01_0101);
assert_eq!(mbf.test_public(), 0b01_0101);
mbf.set_test_public(0);
assert_eq!(mbf.test_public(), 0);
test_field!(mbf, test_private0 { bit: 16, [u8; 16] });
test_field!(mbf, test_private1 { bit: 17, [u8; 16] });
test_field!(mbf, test_private2 { bit: 18, [u8; 16] });
test_field!(mbf, test_private3 { bit: 19, [u8; 16] });
test_field!(mbf, test_private4 { bit: 20, [u8; 16] });
test_field!(mbf, test_private5 { bit: 21, [u8; 16] });
test_field!(mbf, test_private6 { bit: 22, [u8; 16] });
test_field!(mbf, test_private7 { bit: 23, [u8; 16] });
}