node-stratum-pool/node_modules/bignum/test/buf.js
2014-01-06 15:17:35 -05:00

197 lines
4.9 KiB
JavaScript

var assert = require('assert');
var bignum = require('../');
var put = require('put');
exports.buf_be = function () {
var buf1 = new Buffer([1,2,3,4]);
var num = bignum.fromBuffer(buf1, { size : 4 }).toNumber();
assert.eql(
num,
1*Math.pow(256, 3)
+ 2 * Math.pow(256, 2)
+ 3 * 256
+ 4
);
var buf2 = put().word32be(num).buffer();
assert.eql(buf1, buf2,
'[ ' + [].slice.call(buf1) + ' ] != [ ' + [].slice.call(buf2) + ' ]'
);
};
exports.buf_le = function () {
var buf1 = new Buffer([1,2,3,4]);
var num = bignum
.fromBuffer(buf1, { size : 4, endian : 'little' })
.toNumber()
;
var buf2 = put().word32le(num).buffer();
assert.eql(buf1, buf2,
'[ ' + [].join.call(buf1, ',')
+ ' ] != [ '
+ [].join.call(buf2, ',') + ' ]'
);
};
exports.buf_be_le = function () {
var buf_be = new Buffer([1,2,3,4,5,6,7,8]);
var buf_le = new Buffer([4,3,2,1,8,7,6,5]);
var num_be = bignum
.fromBuffer(buf_be, { size : 4, endian : 'big' })
.toString()
;
var num_le = bignum
.fromBuffer(buf_le, { size : 4, endian : 'little' })
.toString()
;
assert.eql(num_be, num_le);
};
exports.buf_high_bits = function () {
var buf_be = new Buffer([
201,202,203,204,
205,206,207,208
]);
var buf_le = new Buffer([
204,203,202,201,
208,207,206,205
]);
var num_be = bignum
.fromBuffer(buf_be, { size : 4, endian : 'big' })
.toString()
;
var num_le = bignum
.fromBuffer(buf_le, { size : 4, endian : 'little' })
.toString()
;
assert.eql(num_be, num_le);
};
exports.buf_to_from = function () {
var nums = [
0, 1, 10, 15, 3, 16,
7238, 1337, 31337, 505050,
'172389721984375328763297498273498732984324',
'32848432742',
'12988282841231897498217398217398127983721983719283721',
'718293798217398217312387213972198321'
];
nums.forEach(function (num) {
var b = bignum(num);
var u = b.toBuffer();
assert.ok(u);
assert.eql(
bignum.fromBuffer(u).toString(),
b.toString()
);
});
assert.throws(function () {
bignum(-1).toBuffer(); // can't pack negative numbers yet
});
};
exports.toBuf = function () {
var buf = new Buffer([ 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f ]);
var b = bignum(
0x0a * 256*256*256*256*256
+ 0x0b * 256*256*256*256
+ 0x0c * 256*256*256
+ 0x0d * 256*256
+ 0x0e * 256
+ 0x0f
);
assert.eql(b.toString(16), '0a0b0c0d0e0f');
assert.eql(
[].slice.call(b.toBuffer({ endian : 'big', size : 2 })),
[ 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f ]
);
assert.eql(
[].slice.call(b.toBuffer({ endian : 'little', size : 2 })),
[ 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e ]
);
assert.eql(
bignum.fromBuffer(buf).toString(16),
b.toString(16)
);
assert.eql(
[].slice.call(bignum(43135012110).toBuffer({
endian : 'little', size : 4
})),
[ 0x0a, 0x00, 0x00, 0x00, 0x0e, 0x0d, 0x0c, 0x0b ]
);
assert.eql(
[].slice.call(bignum(43135012110).toBuffer({
endian : 'big', size : 4
})),
[ 0x00, 0x00, 0x00, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e ]
);
};
exports.zeroPad = function () {
var b = bignum(0x123456);
assert.eql(
[].slice.call(b.toBuffer({ endian : 'big', size:4 })),
[ 0x00, 0x12, 0x34, 0x56 ]
);
assert.eql(
[].slice.call(b.toBuffer({ endian : 'little', size:4 })),
[ 0x56, 0x34, 0x12, 0x00 ]
);
};
exports.toMpint = function () {
// test values taken directly out of
// http://tools.ietf.org/html/rfc4251#page-10
var refs = {
'0' : new Buffer([ 0x00, 0x00, 0x00, 0x00 ]),
'9a378f9b2e332a7' : new Buffer([
0x00, 0x00, 0x00, 0x08,
0x09, 0xa3, 0x78, 0xf9,
0xb2, 0xe3, 0x32, 0xa7,
]),
'80' : new Buffer([ 0x00, 0x00, 0x00, 0x02, 0x00, 0x80 ]),
'-1234' : new Buffer([ 0x00, 0x00, 0x00, 0x02, 0xed, 0xcc ]),
'-deadbeef' : new Buffer([
0x00, 0x00, 0x00, 0x05, 0xff, 0x21, 0x52, 0x41, 0x11
]),
};
Object.keys(refs).forEach(function (key) {
var buf0 = bignum(key, 16).toBuffer('mpint');
var buf1 = refs[key];
assert.eql(
buf0, buf1,
buf0.inspect() + ' != ' + buf1.inspect()
+ ' for bignum(' + key + ')'
);
});
};
if (process.argv[1] === __filename) {
assert.eql = assert.deepEqual;
Object.keys(exports).forEach(function (ex) {
exports[ex]();
});
if ("function" === typeof gc) {
gc();
}
}