1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
use lexical_util::mul::{mul, mulhi};
use quickcheck::quickcheck;
quickcheck! {
#[cfg_attr(miri, ignore)]
fn mul_u16_quickcheck(x: u16, y: u16) -> bool {
let (hi, lo) = mul::<u16, u8>(x, y);
let hi = hi as u32;
let lo = lo as u32;
let expected = x as u32 * y as u32;
((hi << 16) | lo) == expected
}
#[cfg_attr(miri, ignore)]
fn mul_u32_quickcheck(x: u32, y: u32) -> bool {
let (hi, lo) = mul::<u32, u16>(x, y);
let hi = hi as u64;
let lo = lo as u64;
let expected = x as u64 * y as u64;
((hi << 32) | lo) == expected
}
#[cfg_attr(miri, ignore)]
fn mul_u64_quickcheck(x: u64, y: u64) -> bool {
let (hi, lo) = mul::<u64, u32>(x, y);
let hi = hi as u128;
let lo = lo as u128;
let expected = x as u128 * y as u128;
((hi << 64) | lo) == expected
}
#[cfg_attr(miri, ignore)]
fn mulhi_u16_quickcheck(x: u16, y: u16) -> bool {
let actual = mulhi::<u16, u8>(x, y);
let expected = (x as u32 * y as u32) >> 16;
actual == expected as u16
}
#[cfg_attr(miri, ignore)]
fn mulhi_u32_quickcheck(x: u32, y: u32) -> bool {
let actual = mulhi::<u32, u16>(x, y);
let expected = (x as u64 * y as u64) >> 32;
actual == expected as u32
}
#[cfg_attr(miri, ignore)]
fn mulhi_u64_quickcheck(x: u64, y: u64) -> bool {
let actual = mulhi::<u64, u32>(x, y);
let expected = (x as u128 * y as u128) >> 64;
actual == expected as u64
}
}
|