Adding Rem op (%) to Uint128 & Uint256 types
This commit is contained in:
parent
9cb5d2e711
commit
7588b211ff
|
@ -166,6 +166,15 @@ macro_rules! construct_uint {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ::std::ops::Rem<$name> for $name {
|
||||||
|
type Output = $name;
|
||||||
|
|
||||||
|
fn rem(self, other: $name) -> $name {
|
||||||
|
let times = self / other;
|
||||||
|
self - (times * other)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl $crate::util::BitArray for $name {
|
impl $crate::util::BitArray for $name {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn bit(&self, index: usize) -> bool {
|
fn bit(&self, index: usize) -> bool {
|
||||||
|
@ -479,6 +488,14 @@ mod tests {
|
||||||
Uint256::from_u64(21).unwrap());
|
Uint256::from_u64(21).unwrap());
|
||||||
let div = mult / Uint256::from_u64(300).unwrap();
|
let div = mult / Uint256::from_u64(300).unwrap();
|
||||||
assert_eq!(div, Uint256([0x9F30411021524112u64, 0x0001BD5B7DDFBD5A, 0, 0]));
|
assert_eq!(div, Uint256([0x9F30411021524112u64, 0x0001BD5B7DDFBD5A, 0, 0]));
|
||||||
|
|
||||||
|
assert_eq!(Uint256::from_u64(105).unwrap() % Uint256::from_u64(5).unwrap(),
|
||||||
|
Uint256::from_u64(0).unwrap());
|
||||||
|
assert_eq!(Uint256::from_u64(35498456).unwrap() % Uint256::from_u64(3435).unwrap(),
|
||||||
|
Uint256::from_u64(1166).unwrap());
|
||||||
|
let rem_src = mult * Uint256::from_u64(39842).unwrap() + Uint256::from_u64(9054).unwrap();
|
||||||
|
assert_eq!(rem_src % Uint256::from_u64(39842).unwrap(),
|
||||||
|
Uint256::from_u64(9054).unwrap());
|
||||||
// TODO: bit inversion
|
// TODO: bit inversion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue