bitcore/test/crypto/bn.js

154 lines
4.1 KiB
JavaScript
Raw Normal View History

2014-11-20 13:40:23 -08:00
'use strict';
var should = require('chai').should();
var bitcore = require('../..');
var BN = bitcore.crypto.BN;
2014-08-14 08:32:47 -07:00
describe('BN', function() {
it('should create a bn', function() {
var bn = new BN(50);
should.exist(bn);
bn.toString().should.equal('50');
});
it('should parse this number', function() {
var bn = new BN(999970000);
bn.toString().should.equal('999970000');
});
it('should parse numbers below and at bn.js internal word size', function() {
var bn = new BN(Math.pow(2, 26) - 1);
bn.toString().should.equal((Math.pow(2, 26) - 1).toString());
2014-11-20 13:40:23 -08:00
bn = new BN(Math.pow(2, 26));
bn.toString().should.equal((Math.pow(2, 26)).toString());
});
2014-12-19 13:28:52 -08:00
describe('#add', function() {
it('should add two small numbers together', function() {
var bn1 = new BN(50);
var bn2 = new BN(75);
var bn3 = bn1.add(bn2);
bn3.toString().should.equal('125');
});
});
describe('#sub', function() {
it('should subtract a small number', function() {
var bn1 = new BN(50);
var bn2 = new BN(25);
var bn3 = bn1.sub(bn2);
bn3.toString().should.equal('25');
});
});
describe('#gt', function() {
it('should say 1 is greater than 0', function() {
var bn1 = new BN(1);
var bn0 = new BN(0);
bn1.gt(bn0).should.equal(true);
});
it('should say a big number is greater than a small big number', function() {
var bn1 = new BN('24023452345398529485723980457');
var bn0 = new BN('34098234283412341234049357');
bn1.gt(bn0).should.equal(true);
});
it('should say a big number is great than a standard number', function() {
var bn1 = new BN('24023452345398529485723980457');
var bn0 = new BN(5);
bn1.gt(bn0).should.equal(true);
});
});
2014-12-19 13:28:52 -08:00
describe('to/from ScriptNumBuffer', function() {
[0, 1, 10, 256, 1000, 65536, 65537, -1, -1000, -65536, -65537].forEach(function(n) {
it('rountrips correctly for ' + n, function() {
BN.fromScriptNumBuffer(new BN(n).toScriptNumBuffer()).toNumber().should.equal(n);
2014-12-19 13:28:52 -08:00
});
});
});
describe('#fromString', function() {
it('should make BN from a string', function() {
2014-12-19 13:28:52 -08:00
BN.fromString('5').toString().should.equal('5');
});
2015-05-27 11:11:43 -07:00
it('should work with hex string', function() {
BN.fromString('7fffff0000000000000000000000000000000000000000000000000000000000', 16)
.toString(16).should.equal('7fffff0000000000000000000000000000000000000000000000000000000000');
2015-05-27 11:01:26 -07:00
});
});
describe('#toString', function() {
it('should make a string', function() {
new BN(5).toString().should.equal('5');
});
});
describe('@fromBuffer', function() {
2014-12-19 13:28:52 -08:00
it('should work with big endian', function() {
2014-12-19 13:28:52 -08:00
var bn = BN.fromBuffer(new Buffer('0001', 'hex'), {
endian: 'big'
});
bn.toString().should.equal('1');
});
it('should work with big endian 256', function() {
2014-12-19 13:28:52 -08:00
var bn = BN.fromBuffer(new Buffer('0100', 'hex'), {
endian: 'big'
});
bn.toString().should.equal('256');
});
it('should work with little endian if we specify the size', function() {
2014-12-19 13:28:52 -08:00
var bn = BN.fromBuffer(new Buffer('0100', 'hex'), {
size: 2,
endian: 'little'
});
bn.toString().should.equal('1');
});
});
describe('#toBuffer', function() {
2014-12-19 13:28:52 -08:00
it('should create a 4 byte buffer', function() {
var bn = new BN(1);
2014-12-19 13:28:52 -08:00
bn.toBuffer({
size: 4
}).toString('hex').should.equal('00000001');
});
it('should create a 4 byte buffer in little endian', function() {
var bn = new BN(1);
2014-12-19 13:28:52 -08:00
bn.toBuffer({
size: 4,
endian: 'little'
}).toString('hex').should.equal('01000000');
});
it('should create a 2 byte buffer even if you ask for a 1 byte', function() {
var bn = new BN('ff00', 16);
2014-12-19 13:28:52 -08:00
bn.toBuffer({
size: 1
}).toString('hex').should.equal('ff00');
});
it('should create a 4 byte buffer even if you ask for a 1 byte', function() {
var bn = new BN('ffffff00', 16);
2014-12-19 13:28:52 -08:00
bn.toBuffer({
size: 4
}).toString('hex').should.equal('ffffff00');
});
});
});