51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
|
import * as bma from '#pkg'
|
||
|
|
||
|
describe('crt', function () {
|
||
|
const tests = [
|
||
|
{
|
||
|
input: {
|
||
|
remainders: [2n, 3n, 10n],
|
||
|
modulos: [5n, 7n, 11n]
|
||
|
},
|
||
|
output: 87n
|
||
|
},
|
||
|
{
|
||
|
input: {
|
||
|
remainders: [3n, 3n, 4n],
|
||
|
modulos: [7n, 5n, 12n],
|
||
|
modulo: 7n * 5n * 12n
|
||
|
},
|
||
|
output: 388n
|
||
|
}
|
||
|
]
|
||
|
const invalidTests = [
|
||
|
{
|
||
|
input: {
|
||
|
remainders: [2n, 3n, 10n],
|
||
|
modulos: [5n, 7n]
|
||
|
},
|
||
|
output: 87n
|
||
|
}
|
||
|
]
|
||
|
for (const test of tests) {
|
||
|
describe(`crt([${test.input.remainders.toString()}], [${test.input.modulos.toString()}])`, function () {
|
||
|
it(`should return ${test.output}`, function () {
|
||
|
const ret = bma.crt(test.input.remainders, test.input.modulos, test.input.modulo)
|
||
|
chai.expect(ret).to.equal(test.output)
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
for (const test of invalidTests) {
|
||
|
describe(`crt([${test.input.remainders.toString()}], [${test.input.modulos.toString()}])`, function () {
|
||
|
it('should throw RangeError', function () {
|
||
|
try {
|
||
|
bma.crt(test.input.remainders, test.input.modulos)
|
||
|
throw new Error('should have failed')
|
||
|
} catch (err) {
|
||
|
chai.expect(err).to.be.instanceOf(RangeError)
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
})
|