(expr: Expression)
| 343 | } |
| 344 | |
| 345 | const sqrt = extractSquareRoot(absTerm); |
| 346 | if (sqrt === null) return null; |
| 347 | |
| 348 | results.push({ sqrt, isNegative: isNeg }); |
| 349 | } |
| 350 | |
| 351 | // We need exactly one positive and one negative square |
| 352 | const posSquares = results.filter((r) => !r.isNegative); |
| 353 | const negSquares = results.filter((r) => r.isNegative); |
| 354 | |
| 355 | if (posSquares.length !== 1 || negSquares.length !== 1) return null; |
| 356 | |
| 357 | const a = posSquares[0].sqrt; |
| 358 | const b = negSquares[0].sqrt; |
| 359 | |
| 360 | // Pattern: a² - b² = (a-b)(a+b) |
no test coverage detected