refactor: Convert resolution to two-tier system
Typed-function's sort order/matching algorithm was interfering with template resolution. This commit solves the difficulty by moving the "catchall" implementations that implement generation of new template instances into a separate "fallback" typed-function universe, so that Pocomath can control exactly when that is searched. Removes a couple of the matching anomalies already noted in the tests. Also extends return types to somewhat more functions.
This commit is contained in:
parent
a2f76a55b8
commit
de42c22ab4
13 changed files with 428 additions and 278 deletions
|
@ -8,14 +8,12 @@ describe('tuple', () => {
|
|||
|
||||
it('does not allow unification by converting consecutive arguments', () => {
|
||||
assert.throws(() => math.tuple(3, 5.2, 2n), /TypeError.*unif/)
|
||||
// Hence, the order matters in a slightly unfortunate way,
|
||||
// but I think being a little ragged in these edge cases is OK:
|
||||
assert.throws(
|
||||
() => math.tuple(3, 2n, math.complex(5.2)),
|
||||
/TypeError.*unif/)
|
||||
assert.deepStrictEqual(
|
||||
math.tuple(3, math.complex(2n), 5.2),
|
||||
{elts: [math.complex(3), math.complex(2n), math.complex(5.2)]})
|
||||
assert.throws(
|
||||
() => math.tuple(3, math.complex(2n), 5.2),
|
||||
/TypeError.*unif/)
|
||||
})
|
||||
|
||||
it('can be tested for zero and equality', () => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue