picomath/test/custom.js

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)
})
})