#![cfg(test)]
use multitype::Unsigned;
#[test]
fn test_bit_width() {
assert_eq!(Unsigned::bit_width(00_u8), 0);
assert_eq!(Unsigned::bit_width(01_u8), 1);
assert_eq!(Unsigned::bit_width(02_u8), 2);
assert_eq!(Unsigned::bit_width(03_u8), 2);
assert_eq!(Unsigned::bit_width(04_u8), 3);
assert_eq!(Unsigned::bit_width(05_u8), 3);
assert_eq!(Unsigned::bit_width(06_u8), 3);
assert_eq!(Unsigned::bit_width(07_u8), 3);
assert_eq!(Unsigned::bit_width(08_u8), 4);
assert_eq!(Unsigned::bit_width(09_u8), 4);
assert_eq!(Unsigned::bit_width(10_u8), 4);
assert_eq!(Unsigned::bit_width(11_u8), 4);
assert_eq!(Unsigned::bit_width(12_u8), 4);
assert_eq!(Unsigned::bit_width(13_u8), 4);
assert_eq!(Unsigned::bit_width(14_u8), 4);
assert_eq!(Unsigned::bit_width(15_u8), 4);
}
#[test]
fn test_unsigned() {
let mut value0 = 0_u8;
let mut value1 = 0_u16;
let mut value2 = 0_u32;
let mut value3 = 0_u64;
let mut value4 = 0_u128;
fn op<T: Copy + From<u8> + Unsigned>(value: &mut T) {
*value = 1_u8.into();
*value = value.wrapping_sub(2.into());
}
op(&mut value0);
op(&mut value1);
op(&mut value2);
op(&mut value3);
op(&mut value4);
assert_eq!(value0, 0xFF);
assert_eq!(value1, 0xFF_FF);
assert_eq!(value2, 0xFF_FF_FF_FF);
assert_eq!(value3, 0xFF_FF_FF_FF_FF_FF_FF_FF);
assert_eq!(value4, 0xFF_FF_FF_FF_FF_FF_FF_FF_FF_FF_FF_FF_FF_FF_FF_FF);
}