feat(PocomathInstance): Add .returnTypeOf method
This commit is contained in:
parent
95f6ccc5a0
commit
340dbd436e
@ -2,7 +2,7 @@
|
|||||||
import typed from 'typed-function'
|
import typed from 'typed-function'
|
||||||
import {makeChain} from './Chain.mjs'
|
import {makeChain} from './Chain.mjs'
|
||||||
import {dependencyExtractor, generateTypeExtractor} from './extractors.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'
|
import {typeListOfSignature, typesOfSignature, subsetOfKeys} from './utils.mjs'
|
||||||
|
|
||||||
const anySpec = {} // fixed dummy specification of 'any' type
|
const anySpec = {} // fixed dummy specification of 'any' type
|
||||||
@ -191,6 +191,16 @@ export default class PocomathInstance {
|
|||||||
return result
|
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: */
|
/* Return a chain object for this instance with a given value: */
|
||||||
chain(value) {
|
chain(value) {
|
||||||
return makeChain(value, this, this._chainRepository)
|
return makeChain(value, this, this._chainRepository)
|
||||||
|
@ -20,6 +20,10 @@ describe('The default full pocomath instance "math"', () => {
|
|||||||
assert.strictEqual(math.typeOf({re: 6.28, im: 2.72}), 'Complex<number>')
|
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', () => {
|
it('can subtract numbers', () => {
|
||||||
assert.strictEqual(math.subtract(12, 5), 7)
|
assert.strictEqual(math.subtract(12, 5), 7)
|
||||||
//assert.strictEqual(math.subtract(3n, 1.5), 1.5)
|
//assert.strictEqual(math.subtract(3n, 1.5), 1.5)
|
||||||
|
Loading…
Reference in New Issue
Block a user