feat(PocomathInstance): Add .returnTypeOf method

This commit is contained in:
Glen Whitney 2022-08-11 23:51:47 -07:00
parent 95f6ccc5a0
commit 340dbd436e
2 changed files with 15 additions and 1 deletions

View File

@ -2,7 +2,7 @@
import typed from 'typed-function'
import {makeChain} from './Chain.mjs'
import {dependencyExtractor, generateTypeExtractor} from './extractors.mjs'
import R_ from './returns.mjs'
import {R_, returnTypeOf} from './returns.mjs'
import {typeListOfSignature, typesOfSignature, subsetOfKeys} from './utils.mjs'
const anySpec = {} // fixed dummy specification of 'any' type
@ -191,6 +191,16 @@ export default class PocomathInstance {
return result
}
/* Determine the return type of an operation given an input signature */
returnTypeOf(operation, signature) {
if (typeof operation === 'string') {
operation = this[operation]
}
if (!(this._typed.isTypedFunction(operation))) return 'any'
const details = this._typed.findSignature(operation, signature)
return returnTypeOf(details.fn)
}
/* Return a chain object for this instance with a given value: */
chain(value) {
return makeChain(value, this, this._chainRepository)

View File

@ -20,6 +20,10 @@ describe('The default full pocomath instance "math"', () => {
assert.strictEqual(math.typeOf({re: 6.28, im: 2.72}), 'Complex<number>')
})
it('can determine the return types of operations', () => {
assert.strictEqual(math.returnTypeOf('negate', 'number'), 'number')
})
it('can subtract numbers', () => {
assert.strictEqual(math.subtract(12, 5), 7)
//assert.strictEqual(math.subtract(3n, 1.5), 1.5)