( self: Expression )
| 1420 | if (conjunct === false) return false; |
| 1421 | if (conjunct === undefined) result = undefined; |
| 1422 | } |
| 1423 | return result; |
| 1424 | } |
| 1425 | |
| 1426 | // 2. The collection's `contains` handler |
| 1427 | if (typeof collection.contains === 'function') { |
| 1428 | const result = collection.contains(x); |
| 1429 | if (result === true) return true; |
| 1430 | if (result === false) return false; |
| 1431 | } |
| 1432 | |
| 1433 | // 2b. Range/Interval queries with a symbolic element: mirror the |
| 1434 | // assume-side decomposition (`assumeElementOfSet` cases 2 & 3, design |
| 1435 | // §3.2/§5.1c) — a type conjunct plus one bound conjunct per finite |
| 1436 | // numeric endpoint, with infinite endpoints skipped exactly as |
| 1437 | // `assumeBound` skips them. Facts stored decomposed thus answer queries |
| 1438 | // decomposed. Symbolic endpoints yield an indeterminate conjunct (the |
| 1439 | // assume side drops them, so no stored fact can entail the bound). |
| 1440 | if (isFunction(collection, 'Range') && collection.nops >= 2) { |
nothing calls this directly
no test coverage detected