fixed_bigint/fixeduint/
euclid.rs1use num_traits::{CheckedEuclid, Euclid};
2
3use super::{FixedUInt, MachineWord};
4use num_traits::{CheckedDiv, CheckedRem};
5
6impl<T: MachineWord, const N: usize> Euclid for FixedUInt<T, N> {
7 fn div_euclid(&self, v: &Self) -> Self {
8 self / v
9 }
10
11 fn rem_euclid(&self, v: &Self) -> Self {
12 self % v
13 }
14}
15
16impl<T: MachineWord, const N: usize> CheckedEuclid for FixedUInt<T, N> {
17 fn checked_div_euclid(&self, v: &Self) -> Option<Self> {
18 self.checked_div(v)
19 }
20
21 fn checked_rem_euclid(&self, v: &Self) -> Option<Self> {
22 self.checked_rem(v)
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use super::*;
29
30 #[test]
31 fn test_div_euclid() {
32 let a = FixedUInt::<u8, 2>::from(100u8);
33 let b = FixedUInt::<u8, 2>::from(30u8);
34 assert_eq!(a.div_euclid(&b), 3u8.into());
35 assert_eq!(a.rem_euclid(&b), 10u8.into());
36 }
37
38 #[test]
39 fn test_checked_div_euclid() {
40 let a = FixedUInt::<u8, 2>::from(100u8);
41 let b = FixedUInt::<u8, 2>::from(30u8);
42 assert_eq!(a.checked_div_euclid(&b), Some(3u8.into()));
43 assert_eq!(a.checked_rem_euclid(&b), Some(10u8.into()));
44 }
45}