feat: Template operations #41
@ -26,6 +26,7 @@ export default class PocomathInstance {
|
|||||||
'install',
|
'install',
|
||||||
'installType',
|
'installType',
|
||||||
'name',
|
'name',
|
||||||
|
'typeOf',
|
||||||
'Types',
|
'Types',
|
||||||
'undefinedTypes'
|
'undefinedTypes'
|
||||||
])
|
])
|
||||||
@ -153,7 +154,13 @@ export default class PocomathInstance {
|
|||||||
if (type === 'any' || this._templateParam(type)) continue
|
if (type === 'any' || this._templateParam(type)) continue
|
||||||
this.installType(type, spec)
|
this.installType(type, spec)
|
||||||
}
|
}
|
||||||
this._installFunctions(other._imps)
|
const migrateImps = {}
|
||||||
|
for (const operator in other._imps) {
|
||||||
|
if (operator != 'typeOf') { // skip the builtin, we already have it
|
||||||
|
migrateImps[operator] = other._imps[operator]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._installFunctions(migrateImps)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -305,6 +312,10 @@ export default class PocomathInstance {
|
|||||||
|
|
||||||
// rebundle anything that uses the new type:
|
// rebundle anything that uses the new type:
|
||||||
this._invalidateDependents(':' + type)
|
this._invalidateDependents(':' + type)
|
||||||
|
// update the typeOf function
|
||||||
|
const imp = {}
|
||||||
|
imp[type] = {uses: new Set(), does: () => () => type}
|
||||||
|
this._installFunctions({typeOf: imp})
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns a list of all types that have been mentioned in the
|
/* Returns a list of all types that have been mentioned in the
|
||||||
|
@ -10,6 +10,15 @@ describe('The default full pocomath instance "math"', () => {
|
|||||||
assert.strictEqual(undef.length, 0)
|
assert.strictEqual(undef.length, 0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('has a built-in typeOf operator', () => {
|
||||||
|
assert.strictEqual(math.typeOf(42), 'NumInt')
|
||||||
|
assert.strictEqual(math.typeOf(-1.5), 'number')
|
||||||
|
assert.strictEqual(math.typeOf(-42n), 'bigint')
|
||||||
|
assert.strictEqual(math.typeOf(undefined), 'undefined')
|
||||||
|
assert.strictEqual(math.typeOf({re: 15n, im: -2n}), 'GaussianInteger')
|
||||||
|
assert.strictEqual(math.typeOf({re: 6.28, im: 2.72}), 'Complex')
|
||||||
|
})
|
||||||
|
|
||||||
it('can subtract numbers', () => {
|
it('can subtract numbers', () => {
|
||||||
assert.strictEqual(math.subtract(12, 5), 7)
|
assert.strictEqual(math.subtract(12, 5), 7)
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user