use bitpattern::bitpattern;
#[test]
fn test_bit1() {
let x = 0u8;
assert_eq!(bitpattern!("0", x), Some(()));
assert_eq!(bitpattern!("1", x), None);
assert_eq!(bitpattern!("?", x), Some(()));
assert_eq!(bitpattern!("a", x), Some(0));
let x = 1;
assert_eq!(bitpattern!("0", x), None);
assert_eq!(bitpattern!("1", x), Some(()));
assert_eq!(bitpattern!("?", x), Some(()));
assert_eq!(bitpattern!("a", x), Some(1));
}
#[test]
fn test_bit8() {
let x = 0xacu8;
assert_eq!(bitpattern!("10101100", x), Some(()));
assert_eq!(bitpattern!("10100100", x), None);
assert_eq!(bitpattern!("1?101?00", x), Some(()));
assert_eq!(bitpattern!("1a101100", x), Some(0));
assert_eq!(bitpattern!("1ab011c0", x), Some((0, 1, 0)));
assert_eq!(bitpattern!("1ab0?1c?", x), Some((0, 1, 0)));
assert_eq!(bitpattern!("aaa01bb0", x), Some((5, 2)));
}
#[test]
fn test_bit16() {
let x = 0xacf0u16;
assert_eq!(bitpattern!("1010_1100_1111_0000", x), Some(()));
assert_eq!(bitpattern!("1010_0100_1111_0000", x), None);
assert_eq!(bitpattern!("1?10_1?00_1?11_0??0", x), Some(()));
assert_eq!(bitpattern!("1a10_1100_1111_0000", x), Some(0));
assert_eq!(bitpattern!("1ab0_11c0_1111_0000", x), Some((0, 1, 0)));
assert_eq!(bitpattern!("1ab0_?1c?_1111_0000", x), Some((0, 1, 0)));
assert_eq!(bitpattern!("aaa0_1bb0_111x_xxxx", x), Some((5, 2, 16)));
}
#[test]
fn test_bit32() {
let x = 0xacf0acf0u32;
assert_eq!(
bitpattern!("1010_1100_1111_0000_1010_1100_1111_0000", x),
Some(())
);
assert_eq!(
bitpattern!("1010_0100_1111_0000_1010_0100_1111_0000", x),
None
);
assert_eq!(
bitpattern!("1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0", x),
Some(())
);
assert_eq!(
bitpattern!("1a10_1100_1111_0000_1a10_1100_1111_0000", x),
Some((0, 0))
);
assert_eq!(
bitpattern!("1ab0_11c0_1111_0000_1ab0_11c0_1111_0000", x),
Some((0, 1, 0, 0, 1, 0))
);
assert_eq!(
bitpattern!("1ab0_?1c?_1111_0000_1ab0_?1c?_1111_0000", x),
Some((0, 1, 0, 0, 1, 0))
);
assert_eq!(
bitpattern!("aaa0_1bb0_111x_xxxx_aaa0_1bb0_111x_xxxx", x),
Some((5, 2, 16, 5, 2, 16))
);
}
#[test]
fn test_bit64() {
let x = 0xacf0acf0acf0acf0u64;
assert_eq!(
bitpattern!(
"1010_1100_1111_0000_1010_1100_1111_0000_1010_1100_1111_0000_1010_1100_1111_0000",
x
),
Some(())
);
assert_eq!(
bitpattern!(
"1010_0100_1111_0000_1010_0100_1111_0000_1010_0100_1111_0000_1010_0100_1111_0000",
x
),
None
);
assert_eq!(
bitpattern!(
"1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0",
x
),
Some(())
);
assert_eq!(
bitpattern!(
"1a10_1100_1111_0000_1a10_1100_1111_0000_1a10_1100_1111_0000_1a10_1100_1111_0000",
x
),
Some((0, 0, 0, 0))
);
assert_eq!(
bitpattern!(
"1ab0_11c0_1111_0000_1ab0_11c0_1111_0000_1ab0_11c0_1111_0000_1ab0_11c0_1111_0000",
x
),
Some((0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0))
);
assert_eq!(
bitpattern!(
"1ab0_?1c?_1111_0000_1ab0_?1c?_1111_0000_1ab0_?1c?_1111_0000_1ab0_?1c?_1111_0000",
x
),
Some((0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0))
);
assert_eq!(
bitpattern!(
"aaa0_1bb0_111x_xxxx_aaa0_1bb0_111x_xxxx_aaa0_1bb0_111x_xxxx_aaa0_1bb0_111x_xxxx",
x
),
Some((5, 2, 16, 5, 2, 16, 5, 2, 16, 5, 2, 16))
);
}
#[test]
fn test_bit128() {
let x = 0xacf0acf0acf0acf0acf0acf0acf0acf0u128;
assert_eq!( bitpattern!( "1010_1100_1111_0000_1010_1100_1111_0000_1010_1100_1111_0000_1010_1100_1111_0000_1010_1100_1111_0000_1010_1100_1111_0000_1010_1100_1111_0000_1010_1100_1111_0000", x), Some(()));
assert_eq!( bitpattern!( "1010_0100_1111_0000_1010_0100_1111_0000_1010_0100_1111_0000_1010_0100_1111_0000_1010_0100_1111_0000_1010_0100_1111_0000_1010_0100_1111_0000_1010_0100_1111_0000", x), None);
assert_eq!( bitpattern!( "1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0_1?10_1?00_1?11_0??0", x), Some(()));
assert_eq!( bitpattern!( "1a10_1100_1111_0000_1a10_1100_1111_0000_1a10_1100_1111_0000_1a10_1100_1111_0000_1a10_1100_1111_0000_1a10_1100_1111_0000_1a10_1100_1111_0000_1a10_1100_1111_0000", x), Some((0, 0, 0, 0, 0, 0, 0, 0)));
}
#[test]
fn test_readme() {
let x = 0xacu8;
assert_eq!(bitpattern!("1010_1100", x), Some(()));
assert_eq!(bitpattern!("1010_0100", x), None);
assert_eq!(bitpattern!("1?10_1?00", x), Some(()));
assert_eq!(bitpattern!("1a10_1100", x), Some(0));
assert_eq!(bitpattern!("10a0_1100", x), Some(1));
assert_eq!(bitpattern!("1aaa_a100", x), Some(5));
assert_eq!(bitpattern!("1aa0_aa00", x), Some((1, 3)));
assert_eq!(bitpattern!("1aab_bccc", x), Some((1, 1, 4)));
}
#[test]
fn test_expr() {
let x = 0xacu8;
let y = 0x1;
assert_eq!(bitpattern!("10101101", x + y), Some(()));
assert_eq!(bitpattern!("10100101", x + y), None);
assert_eq!(bitpattern!("1?101?01", x + y), Some(()));
assert_eq!(bitpattern!("1a101101", x + y), Some(0));
assert_eq!(bitpattern!("1ab011c1", x + y), Some((0, 1, 0)));
assert_eq!(bitpattern!("1ab0?1c?", x + y), Some((0, 1, 0)));
assert_eq!(bitpattern!("aaa01bb1", x + y), Some((5, 2)));
assert_eq!(bitpattern!("10101101", 0xad), Some(()));
assert_eq!(bitpattern!("10100101", 0xad), None);
assert_eq!(bitpattern!("1?101?01", 0xad), Some(()));
assert_eq!(bitpattern!("1a101101", 0xad), Some(0));
assert_eq!(bitpattern!("1ab011c1", 0xad), Some((0, 1, 0)));
assert_eq!(bitpattern!("1ab0?1c?", 0xad), Some((0, 1, 0)));
assert_eq!(bitpattern!("aaa01bb1", 0xad), Some((5, 2)));
}