react / wstein / node_modules / browserify / node_modules / crypto-browserify / node_modules / diffie-hellman / node_modules / bn.js / test / binary-test.js
80559 viewsvar assert = require('assert');1var BN = require('../').BN;2var fixtures = require('./fixtures');34describe('BN.js/Binary', function() {5describe('.shl()', function() {6it('should shl numbers', function() {7assert.equal(new BN('69527932928').shln(13).toString(16),8'2060602000000');9assert.equal(new BN('69527932928').shln(45).toString(16),10'206060200000000000000');11});12});1314describe('.shr()', function() {15it('should shr numbers', function() {16assert.equal(new BN('69527932928').shrn(13).toString(16),17'818180');18assert.equal(new BN('69527932928').shrn(17).toString(16),19'81818');20assert.equal(new BN('69527932928').shrn(256).toString(16),21'0');22});23});2425describe('.bincn()', function() {26it('should increment bit', function() {27assert.equal(new BN(0).bincn(1).toString(16), '2');28assert.equal(new BN(2).bincn(1).toString(16), '4');29assert.equal(new BN(2).bincn(1).bincn(1).toString(16),30new BN(2).bincn(2).toString(16));31assert.equal(new BN(0xffffff).bincn(1).toString(16), '1000001');32});33});3435describe('.imaskn()', function() {36it('should mask bits in-place', function() {37assert.equal(new BN(0).imaskn(1).toString(16), '0');38assert.equal(new BN(3).imaskn(1).toString(16), '1');39assert.equal(new BN('123456789', 16).imaskn(4).toString(16), '9');40assert.equal(new BN('123456789', 16).imaskn(16).toString(16), '6789');41assert.equal(new BN('123456789', 16).imaskn(28).toString(16), '3456789');42});43});4445describe('.testn()', function() {46it('should support test specific bit', function() {47[48'ff',49'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'50].forEach(function(hex) {51var bn = new BN(hex, 16)52var bl = bn.bitLength()5354for (var i = 0; i < bl; ++i) {55assert.equal(bn.testn(i), true);56}5758// test off the end59assert.equal(bn.testn(bl), false);60})6162var xbits = '01111001010111001001000100011101' +63'11010011101100011000111001011101' +64'10010100111000000001011000111101' +65'01011111001111100100011110000010' +66'01011010100111010001010011000100' +67'01101001011110100001001111100110' +68'001110010111';6970var x = new BN(71'23478905234580795234378912401239784125643978256123048348957342'72)73for (var i = 0; i < x.bitLength(); ++i) {74assert.equal(x.testn(i), (xbits.charAt(i) === '1'), 'Failed @ bit ' + i)75}76});7778it('should have short-cuts', function() {79var x = new BN('abcd', 16);80assert(!x.testn(128));81});82});8384describe('.and()', function() {85it('should and numbers', function() {86assert.equal(new BN('1010101010101010101010101010101010101010', 2)87.and(new BN('101010101010101010101010101010101010101', 2))88.toString(2), '0');89});9091it('should and numbers of different limb-length', function() {92assert.equal(93new BN('abcd0000ffff', 16)94.and(new BN('abcd', 16)).toString(16),95'abcd');96});97});9899describe('.iand()', function() {100it('should iand numbers', function() {101assert.equal(new BN('1010101010101010101010101010101010101010', 2)102.iand(new BN('101010101010101010101010101010101010101', 2))103.toString(2), '0');104assert.equal(new BN('1000000000000000000000000000000000000001', 2)105.iand(new BN('1', 2))106.toString(2), '1')107assert.equal(new BN('1', 2)108.iand(new BN('1000000000000000000000000000000000000001', 2))109.toString(2), '1')110});111});112113describe('.or()', function() {114it('should or numbers', function () {115assert.equal(new BN('1010101010101010101010101010101010101010', 2)116.or(new BN('101010101010101010101010101010101010101', 2))117.toString(2), '1111111111111111111111111111111111111111');118});119120it('should or numbers of different limb-length', function() {121assert.equal(122new BN('abcd00000000', 16)123.or(new BN('abcd', 16)).toString(16),124'abcd0000abcd');125});126});127128describe('.ior()', function() {129it('should ior numbers', function () {130assert.equal(new BN('1010101010101010101010101010101010101010', 2)131.ior(new BN('101010101010101010101010101010101010101', 2))132.toString(2), '1111111111111111111111111111111111111111');133assert.equal(new BN('1000000000000000000000000000000000000000', 2)134.ior(new BN('1', 2))135.toString(2), '1000000000000000000000000000000000000001');136assert.equal(new BN('1', 2)137.ior(new BN('1000000000000000000000000000000000000000', 2))138.toString(2), '1000000000000000000000000000000000000001');139});140});141142describe('.xor()', function() {143it('should xor numbers', function () {144assert.equal(new BN('11001100110011001100110011001100', 2)145.xor(new BN('1100110011001100110011001100110', 2))146.toString(2), '10101010101010101010101010101010');147});148});149150describe('.ixor()', function() {151it('should ixor numbers', function () {152assert.equal(new BN('11001100110011001100110011001100', 2)153.ixor(new BN('1100110011001100110011001100110', 2))154.toString(2), '10101010101010101010101010101010');155assert.equal(new BN('11001100110011001100110011001100', 2)156.ixor(new BN('1', 2))157.toString(2), '11001100110011001100110011001101');158assert.equal(new BN('1', 2)159.ixor(new BN('11001100110011001100110011001100', 2))160.toString(2), '11001100110011001100110011001101');161});162163it('should and numbers of different limb-length', function() {164assert.equal(165new BN('abcd0000ffff', 16)166.xor(new BN('abcd', 16)).toString(16),167'abcd00005432');168});169});170171describe('.setn()', function() {172it('should allow single bits to be set', function () {173assert.equal(new BN(0).setn(2, true).toString(2), '100');174assert.equal(new BN(0).setn(27, true).toString(2),175'1000000000000000000000000000');176assert.equal(new BN('1000000000000000000000000001', 2).setn(27, false)177.toString(2), '1');178assert.equal(new BN('101', 2).setn(2, false).toString(2), '1');179});180});181});182183184