fixed_bigint/fixeduint/
euclid.rs

1use 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}