(expr: Expression | undefined)
| 184 | * instead. (This is what makes `toInteger` unsuitable for value-semantic uses |
| 185 | * such as primality testing — see `isPrime` in predicates.ts.) |
| 186 | */ |
| 187 | export function toInteger(expr: Expression | undefined): number | null { |
| 188 | if (!isNumber(expr)) return null; |
| 189 | const num = expr.numericValue; |
| 190 | const re = typeof num === 'number' ? num : num.re; |
| 191 | if (!Number.isFinite(re)) return null; |
| 192 | const n = Math.round(re); |
| 193 | if (!Number.isSafeInteger(n)) return null; |
| 194 | return n; |
| 195 | } |
| 196 | |
| 197 | /** |
no test coverage detected