diff --git a/src/bigint.rs b/src/bigint.rs index 382caab..ebf4576 100644 --- a/src/bigint.rs +++ b/src/bigint.rs @@ -3292,6 +3292,42 @@ mod biguint_tests { assert_eq!(sub_sign(&a.data.data[..], &b.data.data[..]), &a - &b); assert_eq!(sub_sign(&b.data.data[..], &a.data.data[..]), &b - &a); } + + fn test_mul_divide_torture_count(count: usize) { + use rand::{SeedableRng, StdRng, Rng}; + + let bits_max = 1 << 12; + let seed: &[_] = &[1, 2, 3, 4]; + let mut rng: StdRng = SeedableRng::from_seed(seed); + + for _ in 0..count { + /* Test with numbers of random sizes: */ + let xbits = rng.gen_range(0, bits_max); + let ybits = rng.gen_range(0, bits_max); + + let x = rng.gen_biguint(xbits); + let y = rng.gen_biguint(ybits); + + if x.is_zero() || y.is_zero() { + continue; + } + + let prod = &x * &y; + assert_eq!(&prod / &x, y); + assert_eq!(&prod / &y, x); + } + } + + #[test] + fn test_mul_divide_torture() { + test_mul_divide_torture_count(1000); + } + + #[test] + #[ignore] + fn test_mul_divide_torture_long() { + test_mul_divide_torture_count(1000000); + } } #[cfg(test)]