Glen Whitney
e5ec1083e3
Plus a test example where an instance is initialized to have only addition, and then that instance is extended to complex numbers, at which point it has number and complex addition but not negation or subtraction (at all).
40 lines
1.5 KiB
JavaScript
40 lines
1.5 KiB
JavaScript
import assert from 'assert'
|
|
import math from '../picomath.js'
|
|
import picoInstance from '../picomathInstance.js'
|
|
import createNumbers from '../number/all.js'
|
|
import createNumber from '../number/number.js'
|
|
import createAdd from '../number/add.js'
|
|
import createComplex from '../complex/all.js'
|
|
import extendByComplex from '../complex/extendByComplex.js'
|
|
|
|
describe('Custom instances', () => {
|
|
it("doesn't matter what order you assemble", () => {
|
|
const bw = picoInstance('backwards')
|
|
createComplex(bw)
|
|
createNumbers(bw)
|
|
|
|
assert.strictEqual(bw.subtract(16, bw.add(3,4,2)), 7)
|
|
assert.strictEqual(bw.negate(bw.number('8')), -8)
|
|
assert.deepStrictEqual(bw.complex(2,3), {re: 2, im: 3})
|
|
assert.deepStrictEqual(
|
|
bw.subtract(16, bw.add(3, bw.complex(0,4), 2)),
|
|
math.complex(11, -4)) // note both instances coexist
|
|
assert.deepStrictEqual(bw.negate(math.complex(3, '8')).im, -8)
|
|
})
|
|
|
|
it("can selectively import in cute ways", async function () {
|
|
const cherry = picoInstance('cherry')
|
|
createNumber(cherry)
|
|
createAdd(cherry)
|
|
await extendByComplex(cherry)
|
|
// Now we have an instance that supports addition for number and complex
|
|
// and little else:
|
|
assert.strictEqual(cherry.add(3, 4, 2), 9)
|
|
assert.deepStrictEqual(
|
|
cherry.add(cherry.complex(3, 3), 4, cherry.complex(2, 2)),
|
|
math.complex(9,5))
|
|
assert.strictEqual('subtract' in cherry, false)
|
|
assert.strictEqual('negate' in cherry, false)
|
|
})
|
|
})
|