diff --git a/src/biguint.rs b/src/biguint.rs index 623823c8..d634a7d4 100644 --- a/src/biguint.rs +++ b/src/biguint.rs @@ -283,6 +283,9 @@ impl Integer for BigUint { /// Returns `true` if the number is a multiple of `other`. #[inline] fn is_multiple_of(&self, other: &BigUint) -> bool { + if other.is_zero() { + return self.is_zero(); + } (self % other).is_zero() } diff --git a/tests/bigint.rs b/tests/bigint.rs index f244bc4b..4ba5bb57 100644 --- a/tests/bigint.rs +++ b/tests/bigint.rs @@ -1036,6 +1036,18 @@ fn test_lcm() { check(11, 5, 55); } +#[test] +fn test_is_multiple_of() { + assert!(BigInt::from(0).is_multiple_of(&BigInt::from(0))); + assert!(BigInt::from(6).is_multiple_of(&BigInt::from(6))); + assert!(BigInt::from(6).is_multiple_of(&BigInt::from(3))); + assert!(BigInt::from(6).is_multiple_of(&BigInt::from(1))); + + assert!(!BigInt::from(42).is_multiple_of(&BigInt::from(5))); + assert!(!BigInt::from(5).is_multiple_of(&BigInt::from(3))); + assert!(!BigInt::from(42).is_multiple_of(&BigInt::from(0))); +} + #[test] fn test_next_multiple_of() { assert_eq!( diff --git a/tests/biguint.rs b/tests/biguint.rs index 821b754a..bc47d1be 100644 --- a/tests/biguint.rs +++ b/tests/biguint.rs @@ -1085,6 +1085,18 @@ fn test_lcm() { check(99, 17, 1683); } +#[test] +fn test_is_multiple_of() { + assert!(BigUint::from(0u32).is_multiple_of(&BigUint::from(0u32))); + assert!(BigUint::from(6u32).is_multiple_of(&BigUint::from(6u32))); + assert!(BigUint::from(6u32).is_multiple_of(&BigUint::from(3u32))); + assert!(BigUint::from(6u32).is_multiple_of(&BigUint::from(1u32))); + + assert!(!BigUint::from(42u32).is_multiple_of(&BigUint::from(5u32))); + assert!(!BigUint::from(5u32).is_multiple_of(&BigUint::from(3u32))); + assert!(!BigUint::from(42u32).is_multiple_of(&BigUint::from(0u32))); +} + #[test] fn test_next_multiple_of() { assert_eq!(