(expr: Expression)
| 4 | import { isNumber } from './type-guards.js'; |
| 5 | |
| 6 | export function isPrime(expr: Expression): boolean | undefined { |
| 7 | if (!expr.isInteger) return undefined; |
| 8 | if (expr.isNegative) return undefined; |
| 9 | |
| 10 | if (!isNumber(expr)) return undefined; |
| 11 | |
| 12 | // Use the exact bigint path: `toInteger` would silently round integers |
| 13 | // beyond 2^53 (e.g. a large Mersenne prime), yielding a wrong answer. |
| 14 | // `isPrimeBigint` is already O(1) for small values. |
| 15 | const b = asBigint(expr); |
| 16 | if (b !== null) return isPrimeBigint(b); |
| 17 | |
| 18 | return undefined; |
| 19 | } |
no test coverage detected