UNPKG

aureooms-js-integer

Version:

integer code bricks for JavaScript

172 lines (140 loc) 5.38 kB
import test from 'ava' ; import operator from 'aureooms-js-operator' ; import * as integer from '../../../src' ; var check = function(Ctor, cmp, iter, transform){ var name = `integer.cmp<${Ctor.name}, ${cmp[0]}, ${iter[0]}>`; cmp = cmp[1]; iter = iter[1]; var f = 16; var r = Math.pow(2, Ctor.BYTES_PER_ELEMENT * 8); var parse = integer.parse_t(r, f, iter); test(name, function(assert){ for (var k = 0; k < TEST.length; ++k) { var test = TEST[k]; var as = test[0]; var ai = 0; var aj = Math.ceil(as.length * Math.log(f) / Math.log(r)); var a = new Ctor(aj); parse(as, 0, as.length, a, ai, aj); var bs = test[1]; var bi = 0; var bj = Math.ceil(bs.length * Math.log(f) / Math.log(r)); var b = new Ctor(bj); parse(bs, 0, bs.length, b, bi, bj); var actual = cmp(a, ai, aj, b, bi, bj); var expected = transform(test[2], 0); assert.deepEqual(actual, expected, `cmp('${as}','${bs}') === ${expected}`); } }); }; var TEST = [ ['0123456789', '9876543210', -1], ['0000000000', '9876543210', -1], ['9876543209', '9876543210', -1], ['0123456788', '0123456789', -1], ['0123456780', '0123456789', -1], ['0000000000', '0000000007', -1], ['4545464646', '9989748488', -1], ['4747474747', '4848484848', -1], ['1541548548', '1541548549', -1], ['0000000000', '0000000000', 0], ['0000000001', '0000000001', 0], ['0123456789', '0123456789', 0], ['1213245874', '1213245874', 0], ['4548848484', '4548848484', 0], ['6465664848', '6465664848', 0], ['7887878787', '7887878787', 0], ['9824564878', '9824564878', 0], ['9876543210', '9876543210', 0], ['9876543210', '0123456789', 1], ['9876543210', '0000000000', 1], ['9876543210', '9876543209', 1], ['0123456789', '0123456788', 1], ['0123456789', '0123456780', 1], ['0000000007', '0000000000', 1], ['9989748488', '4545464646', 1], ['4848484848', '4747474747', 1], ['1541548549', '1541548548', 1], ['00123456789', '9876543210', -1], ['00000000000', '9876543210', -1], ['09876543209', '9876543210', -1], ['00123456788', '0123456789', -1], ['00123456780', '0123456789', -1], ['00000000000', '0000000007', -1], ['04545464646', '9989748488', -1], ['04747474747', '4848484848', -1], ['01541548548', '1541548549', -1], ['00000000000', '0000000000', 0], ['00000000001', '0000000001', 0], ['00123456789', '0123456789', 0], ['01213245874', '1213245874', 0], ['04548848484', '4548848484', 0], ['06465664848', '6465664848', 0], ['07887878787', '7887878787', 0], ['09824564878', '9824564878', 0], ['09876543210', '9876543210', 0], ['09876543210', '0123456789', 1], ['09876543210', '0000000000', 1], ['09876543210', '9876543209', 1], ['00123456789', '0123456788', 1], ['00123456789', '0123456780', 1], ['00000000007', '0000000000', 1], ['09989748488', '4545464646', 1], ['04848484848', '4747474747', 1], ['01541548549', '1541548548', 1], ['10123456789', '9876543210', 1], ['10000000000', '9876543210', 1], ['19876543209', '9876543210', 1], ['10123456788', '0123456789', 1], ['10123456780', '0123456789', 1], ['10000000000', '0000000007', 1], ['14545464646', '9989748488', 1], ['14747474747', '4848484848', 1], ['11541548548', '1541548549', 1], ['10000000000', '0000000000', 1], ['10000000001', '0000000001', 1], ['10123456789', '0123456789', 1], ['11213245874', '1213245874', 1], ['14548848484', '4548848484', 1], ['16465664848', '6465664848', 1], ['17887878787', '7887878787', 1], ['19824564878', '9824564878', 1], ['19876543210', '9876543210', 1], ['19876543210', '0123456789', 1], ['19876543210', '0000000000', 1], ['19876543210', '9876543209', 1], ['10123456789', '0123456788', 1], ['10123456789', '0123456780', 1], ['10000000007', '0000000000', 1], ['19989748488', '4545464646', 1], ['14848484848', '4747474747', 1], ['11541548549', '1541548548', 1], ]; import algo from 'aureooms-js-algo' ; var TRAITS = [ Uint8Array, Uint16Array, Uint32Array, ]; var bcmp = integer.bcmp_t(); var lcmp = integer.lcmp_t(); var dummy = function(x){ return x; }; var ENDIANESS = [ [['integer.bcmp_t', bcmp], ['algo.biter', algo.biter], dummy], [['integer.lcmp_t', lcmp], ['algo.fiter', algo.fiter], dummy], [['integer.eq<bcmp_t>', integer.eq_t(bcmp)], ['algo.biter', algo.biter], operator.eq], [['integer.eq<lcmp_t>', integer.eq_t(lcmp)], ['algo.fiter', algo.fiter], operator.eq], [['integer.ge<bcmp_t>', integer.ge_t(bcmp)], ['algo.biter', algo.biter], operator.ge], [['integer.ge<lcmp_t>', integer.ge_t(lcmp)], ['algo.fiter', algo.fiter], operator.ge], [['integer.gt<bcmp_t>', integer.gt_t(bcmp)], ['algo.biter', algo.biter], operator.gt], [['integer.gt<lcmp_t>', integer.gt_t(lcmp)], ['algo.fiter', algo.fiter], operator.gt], [['integer.le<bcmp_t>', integer.le_t(bcmp)], ['algo.biter', algo.biter], operator.le], [['integer.le<lcmp_t>', integer.le_t(lcmp)], ['algo.fiter', algo.fiter], operator.le], [['integer.lt<bcmp_t>', integer.lt_t(bcmp)], ['algo.biter', algo.biter], operator.lt], [['integer.lt<lcmp_t>', integer.lt_t(lcmp)], ['algo.fiter', algo.fiter], operator.lt], [['integer.ne<bcmp_t>', integer.ne_t(bcmp)], ['algo.biter', algo.biter], operator.ne], [['integer.ne<lcmp_t>', integer.ne_t(lcmp)], ['algo.fiter', algo.fiter], operator.ne], ]; for (var j = 0; j < ENDIANESS.length; ++j) for (var i = 0; i < TRAITS.length; ++i) check(TRAITS[i], ENDIANESS[j][0], ENDIANESS[j][1], ENDIANESS[j][2]);