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