UNPKG

aureooms-js-integer

Version:

integer code bricks for JavaScript

94 lines (65 loc) 3.51 kB
import test from 'ava' ; import algo from 'aureooms-js-algo' ; import * as integer from '../../../../src' ; var check = function(Ctor, and_t, iter){ var name = `${and_t[0]}<${Ctor.name}, ${iter[0]}>`; and_t = and_t[1]; iter = iter[1]; test(name, function(assert){ var f = 2; var r = Math.pow(2, Ctor.BYTES_PER_ELEMENT * 8); var parse = integer.parse_t(r, f, iter); var and = and_t(r); 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 c = new Ctor(aj); and(a, ai, aj, b, bi, bj, c, ai, aj); var ds = test[2]; var di = 0; var dj = Math.ceil(ds.length * Math.log(f) / Math.log(r)); var d = new Ctor(dj); parse(ds, 0, ds.length, d, di, dj); assert.deepEqual(c, d, `and('${as}','${bs}') === '${ds}'`); } }); var TEST = [ ['0000000000000000', '0000000000000000', '0000000000000000'], ['0000000000000000', '1111111111111111', '0000000000000000'], ['1111111111111111', '0000000000000000', '0000000000000000'], ['1111111111111111', '1111111111111111', '1111111111111111'], ['0000000000000111', '0000000000000111', '0000000000000111'], ['0000111111110000', '0101010101010101', '0000010101010000'], ['0001111111100000', '0101010101010101', '0001010101000000'], ['1111111111111111111111111111111100000000000000000000000000000000', '00000000000000000000000000000000', '0000000000000000000000000000000000000000000000000000000000000000'], ['1111111111111111111111111111111100000000000000000000000000000000', '11111111111111111111111111111111', '1111111111111111111111111111111100000000000000000000000000000000'], ['1111111111111111111111111111111100000000000000001111111111111111', '00000000000000000000000000000000', '0000000000000000000000000000000000000000000000000000000000000000'], ['1111111111111111111111111111111100000000000000001111111111111111', '11111111111111111111111111111111', '1111111111111111111111111111111100000000000000001111111111111111'], ['1111111111111111111111111111111100000000000000000000000000000111', '00000000000000000000000000000111', '0000000000000000000000000000000000000000000000000000000000000111'], ['1111111111111111111111111111111100000000000000000000111111110000', '00000000000000000000000001010101', '0000000000000000000000000000000000000000000000000000000001010000'], ['1111111111111111111111111111111100000000000000000001111111100000', '00000000000000000000000001010101', '0000000000000000000000000000000000000000000000000000000001000000'], ['1111111111111111111111111111111100000000000000000000111111110000', '11111111111111111111111110101010', '1111111111111111111111111111111100000000000000000000111110100000'], ['1111111111111111111111111111111100000000000000000001111111100000', '11111111111111111111111110101010', '1111111111111111111111111111111100000000000000000001111110100000'], ]; }; var CTOR = [ Uint8Array, Uint16Array, Uint32Array, ]; var ENDIANESS = [ [['integer.band_t', integer.band_t], ['algo.biter', algo.biter]], [['integer.land_t', integer.land_t], ['algo.fiter', algo.fiter]], ]; for (var e = 0; e < ENDIANESS.length; ++e) for (var c = 0; c < CTOR.length; ++c) check(CTOR[c], ENDIANESS[e][0], ENDIANESS[e][1]);