diff --git a/src/uu/factor/src/miller_rabin.rs b/src/uu/factor/src/miller_rabin.rs index f000485c72..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 { @@ -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); + } + } + } }