use super::Uint;
impl<const N: usize, const B: usize, const OM: u8> Uint<N, B, OM> {
#[inline]
pub(crate) const fn mul_u128_digit(self, rhs: u128) -> (Self, bool) {
let (out, mut overflow) = self.to_digits::<u128>().mul_digit(rhs);
let mut out = out.to_integer();
overflow |= !out.has_valid_pad_bits();
out.set_sign_bits();
(out, overflow)
}
}
#[cfg(test)]
mod tests {
crate::test::test_all! {
testing unsigned;
quickcheck::quickcheck! {
fn quickcheck_mul_u128(a: UTEST, b: u128) -> quickcheck::TestResult {
let c = match UTEST::try_from(b) {
Ok(v) => v,
Err(_) => return quickcheck::TestResult::discard(),
};
quickcheck::TestResult::from_bool(a.mul_u128_digit(b) == a.overflowing_mul(c))
}
}
#[test]
fn cases_mul_u128() {
assert_eq!(UTEST::from_byte(27).pow(3).overflowing_mul(UTEST::from_byte(8)), UTEST::from_byte(27).pow(3).mul_u128_digit(8));
}
}
}