aureooms-js-integer
Version:
integer code bricks for JavaScript
94 lines (65 loc) • 3.51 kB
JavaScript
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]);