use bitcraft::byteval;
byteval! {
pub struct Id48(3, u16);
}
byteval! {
struct Id64(2, u32);
}
byteval! {
#[repr(align(2))]
struct AlignedId48(3, u16);
}
byteval! {
#[repr(align(8))]
struct AlignedId64(2, u32);
}
byteval! {
struct Id24(3);
}
byteval! {
struct SignedId24(i 3);
}
byteval! {
struct SignedId48(i 3, u16);
}
#[test]
fn test_new_byteval_syntax() {
let id = Id48::from_u64(0x112233445566);
assert_eq!(id.value(), 0x112233445566);
assert_eq!(std::mem::size_of::<Id48>(), 6);
assert_eq!(std::mem::align_of::<Id48>(), 2);
let id64 = Id64::from_u64(0xDEADBEEFCAFEBABE);
assert_eq!(id64.value(), 0xDEADBEEFCAFEBABE);
assert_eq!(std::mem::size_of::<Id64>(), 8);
}
#[test]
fn test_manual_alignment() {
assert_eq!(std::mem::align_of::<AlignedId48>(), 2);
assert_eq!(std::mem::size_of::<AlignedId48>(), 6);
assert_eq!(std::mem::align_of::<AlignedId64>(), 8);
assert_eq!(std::mem::size_of::<AlignedId64>(), 8);
}
#[test]
fn test_default_u8() {
let id = Id24::from_u32(0xABCDEF);
assert_eq!(id.value(), 0xABCDEF);
assert_eq!(std::mem::size_of::<Id24>(), 3);
}
#[test]
fn test_signed_byteval() {
let mut id24 = SignedId24::default();
id24.set_value(-500);
assert_eq!(id24.value(), -500);
id24.set_value(8388607); assert_eq!(id24.value(), 8388607);
id24.set_value(-8388608); assert_eq!(id24.value(), -8388608);
let mut id48 = SignedId48::default();
id48.set_value(-999_999_999);
assert_eq!(id48.value(), -999_999_999);
}