From c5c86b00e99e80e4f62ce53f529d3179c221fa37 Mon Sep 17 00:00:00 2001 From: nicoo Date: Tue, 23 Jun 2020 16:11:47 +0200 Subject: [PATCH 1/2] factor::miller_rabin: Add tests reproducing #1556 --- src/uu/factor/src/miller_rabin.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/uu/factor/src/miller_rabin.rs b/src/uu/factor/src/miller_rabin.rs index f000485c72..b8593d5245 100644 --- a/src/uu/factor/src/miller_rabin.rs +++ b/src/uu/factor/src/miller_rabin.rs @@ -108,4 +108,23 @@ mod tests { } assert!(is_prime(NEXT_PRIME)); } + + #[test] + fn issue_1556() { + // 10 425 511 = 2441 × 4271 + assert!(!is_prime(10_425_511)); + } + + #[test] + fn small_composites() { + use crate::table::P_INVS_U64; + + for i in 0..P_INVS_U64.len() { + let (p, _, _) = P_INVS_U64[i]; + for (q, _, _) in &P_INVS_U64[0..i] { + let n = p * q; + assert!(!is_prime(n), "{} = {} × {} reported prime", n, p, q); + } + } + } } From abf579975c35506ec79ac48e372459827f6d8281 Mon Sep 17 00:00:00 2001 From: nicoo Date: Tue, 23 Jun 2020 16:19:16 +0200 Subject: [PATCH 2/2] factor::miller_rabin: Fix bug in primality test Introduced in 6b9585b1 (#1525: Performance improvements for `factor`). Closes #1556 --- src/uu/factor/src/miller_rabin.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uu/factor/src/miller_rabin.rs b/src/uu/factor/src/miller_rabin.rs index b8593d5245..d133bc6745 100644 --- a/src/uu/factor/src/miller_rabin.rs +++ b/src/uu/factor/src/miller_rabin.rs @@ -64,7 +64,7 @@ pub(crate) fn test(m: A) -> Result { } if x == one || x == minus_one { - break; + continue; } loop {