UNPKG

bigint-buffer

Version:

bigint to buffer conversion with native support

288 lines (245 loc) 9.54 kB
import 'mocha'; declare var process: {browser: boolean;}; import * as chai from 'chai'; import * as path from 'path'; const lib = process.browser ? require('../../dist/browser') : require(path.join(__dirname, '../dist/node')); const toBigIntBE = lib.toBigIntBE; const toBigIntLE = lib.toBigIntLE; const toBufferBE = lib.toBufferBE; const toBufferLE = lib.toBufferLE; // Needed for should.not.be.undefined. /* tslint:disable:no-unused-expression */ chai.should(); const should = chai.should(); const assertEquals = (n0: BigInt, n1: BigInt) => { n0.toString(16).should.equal(n1.toString(16)); }; describe('Try buffer conversion (little endian)', () => { it('0 should equal 0n', () => { assertEquals(toBigIntLE(Buffer.from([0])), BigInt('0')); }); it('1 should equal 1n', async () => { assertEquals(toBigIntLE(Buffer.from([1])), BigInt('1')); }); it('0xdead should equal 0xdeadn', async () => { assertEquals(toBigIntLE(Buffer.from([0xad, 0xde])), BigInt(`0xdead`)); }); it('0xdeadbeef should equal 0xdeadbeefn', async () => { assertEquals( toBigIntLE(Buffer.from([0xef, 0xbe, 0xad, 0xde])), BigInt(`0xdeadbeef`)); }); it('0xbadc0ffee0 should equal 0xbadc0ffee0n', async () => { assertEquals( toBigIntLE(Buffer.from([0xe0, 0xfe, 0x0f, 0xdc, 0xba])), BigInt(`0xbadc0ffee0`)); }); it('0xbadc0ffee0dd should equal 0xbadc0ffee0ddn', async () => { assertEquals( toBigIntLE(Buffer.from([0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba])), BigInt(`0xbadc0ffee0dd`)); }); it('0xbadc0ffee0ddf0 should equal 0xbadc0ffee0ddf0n', async () => { assertEquals( toBigIntLE(Buffer.from([0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba])), BigInt(`0xbadc0ffee0ddf0`)); }); it('0xbadc0ffee0ddf00d should equal 0xbadc0ffee0ddf00dn', async () => { assertEquals( toBigIntLE( Buffer.from([0x0d, 0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba])), BigInt(`0xbadc0ffee0ddf00d`)); }); it('0xbadc0ffee0ddf00ddeadbeef should equal 0xbadc0ffee0ddf00ddeadbeefn', async () => { assertEquals( toBigIntLE(Buffer.from([ 0xef, 0xbe, 0xad, 0xde, 0x0d, 0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba ])), BigInt(`0xbadc0ffee0ddf00ddeadbeef`)); }); it('0xbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeef should equal 0xbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeefn', async () => { assertEquals( toBigIntLE(Buffer.from([ 0xef, 0xbe, 0xad, 0xde, 0x0d, 0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba, 0xef, 0xbe, 0xad, 0xde, 0x0d, 0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba ])), BigInt(`0xbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeef`)); }); it('0xbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeefbeef should equal 0xbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeefbeefn', async () => { assertEquals( toBigIntLE(Buffer.from([ 0xef, 0xbe, 0xef, 0xbe, 0xad, 0xde, 0x0d, 0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba, 0xef, 0xbe, 0xad, 0xde, 0x0d, 0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba ])), BigInt(`0xbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeefbeef`)); }); }); describe('Try buffer conversion (big endian)', () => { it('0 should equal 0n', () => { assertEquals(toBigIntBE(Buffer.from([0])), BigInt(`0`)); }); it('1 should equal 1n', async () => { assertEquals(toBigIntBE(Buffer.from([1])), BigInt(`1`)); }); it('0xdead should equal 0xdeadn', async () => { assertEquals(toBigIntBE(Buffer.from([0xde, 0xad])), BigInt(`0xdead`)); }); it('0xdeadbeef should equal 0xdeadbeefn', async () => { assertEquals( toBigIntBE(Buffer.from([0xde, 0xad, 0xbe, 0xef])), BigInt(`0xdeadbeef`)); }); it('0xbadc0ffee0 should equal 0xbadc0ffee0n', async () => { assertEquals( toBigIntBE(Buffer.from([0xba, 0xdc, 0x0f, 0xfe, 0xe0])), BigInt(`0xbadc0ffee0`)); }); it('0xbadc0ffee0dd should equal 0xbadc0ffee0ddn', async () => { assertEquals( toBigIntBE(Buffer.from([0xba, 0xdc, 0x0f, 0xfe, 0xe0, 0xdd])), BigInt(`0xbadc0ffee0dd`)); }); it('0xbadc0ffee0ddf0 should equal 0xbadc0ffee0ddf0n', async () => { assertEquals( toBigIntBE(Buffer.from([0xba, 0xdc, 0x0f, 0xfe, 0xe0, 0xdd, 0xf0])), BigInt(`0xbadc0ffee0ddf0`)); }); it('0xbadc0ffee0ddf00d should equal 0xbadc0ffee0ddf00dn', async () => { assertEquals( toBigIntBE( Buffer.from([0xba, 0xdc, 0x0f, 0xfe, 0xe0, 0xdd, 0xf0, 0x0d])), BigInt(`0xbadc0ffee0ddf00d`)); }); it('0xbadc0ffee0ddf00ddeadbeef should equal 0xbadc0ffee0ddf00ddeadbeefn', async () => { assertEquals( toBigIntBE(Buffer.from([ 0xba, 0xdc, 0x0f, 0xfe, 0xe0, 0xdd, 0xf0, 0x0d, 0xde, 0xad, 0xbe, 0xef ])), BigInt(`0xbadc0ffee0ddf00ddeadbeef`)); }); it('long value should equal long val', async () => { assertEquals( toBigIntBE(Buffer.from( 'badc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeef', 'hex')), BigInt( `0xbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeef`)); }); it('other long value should equal long val', async () => { assertEquals( toBigIntBE(Buffer.from( 'd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544', 'hex')), BigInt( `0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544`)); }); }); describe('Try bigint conversion (little endian)', () => { it('0 should equal 0n', () => { toBufferLE(BigInt(`0`), 8).should.deep.equal(Buffer.from([ 0, 0, 0, 0, 0, 0, 0, 0 ])); }); it('1 should equal 1n', async () => { toBufferLE(BigInt(`1`), 8).should.deep.equal(Buffer.from([ 1, 0, 0, 0, 0, 0, 0, 0 ])); }); it('1 should equal 1n (32 byte)', async () => { toBufferLE(BigInt(`1`), 32) .should.deep.equal(Buffer.from( '0100000000000000000000000000000000000000000000000000000000000000', 'hex')); }); it('0xdead should equal 0xdeadn (6 byte)', async () => { toBufferLE(BigInt(`0xdead`), 6).should.deep.equal(Buffer.from([ 0xad, 0xde, 0, 0, 0, 0 ])); }); it('0xdeadbeef should equal 0xdeadbeef0000000000n (9 byte)', async () => { toBufferLE(BigInt(`0xdeadbeef`), 9).should.deep.equal(Buffer.from([ 0xef, 0xbe, 0xad, 0xde, 0, 0, 0, 0, 0 ])); }); it('0xbadc0ffee0ddf00d should equal 0xbadc0ffee0ddf00dn (8 byte)', async () => { toBufferLE(BigInt(`0xbadc0ffee0ddf00d`), 8) .should.deep.equal( Buffer.from([0x0d, 0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba])); }); it('0xbadc0ffee0ddf00ddeadbeef should equal 0xbadc0ffee0ddf00ddeadbeefn', async () => { toBufferLE(BigInt(`0xbadc0ffee0ddf00ddeadbeef`), 12) .should.deep.equal(Buffer.from([ 0xef, 0xbe, 0xad, 0xde, 0x0d, 0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba ])); }); it('long value should equal long val', async () => { toBufferLE(BigInt(`0xbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeef`), 24) .should.deep.equal(Buffer.from([ 0xef, 0xbe, 0xad, 0xde, 0x0d, 0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba, 0xef, 0xbe, 0xad, 0xde, 0x0d, 0xf0, 0xdd, 0xe0, 0xfe, 0x0f, 0xdc, 0xba ])); }); }); describe('Try bigint conversion (big endian)', () => { it('0 should equal 0n', () => { toBufferBE(BigInt(`0`), 8).should.deep.equal(Buffer.from([ 0, 0, 0, 0, 0, 0, 0, 0 ])); }); it('1 should equal 1n', async () => { toBufferBE(BigInt(`1`), 8).should.deep.equal(Buffer.from([ 0, 0, 0, 0, 0, 0, 0, 1 ])); }); it('1 should equal 1n (32 byte)', async () => { toBufferBE(BigInt(`1`), 32) .should.deep.equal(Buffer.from( '0000000000000000000000000000000000000000000000000000000000000001', 'hex')); }); it('0xdead should equal 0xdeadn (6 byte)', async () => { toBufferBE(BigInt(`0xdead`), 6).should.deep.equal(Buffer.from([ 0, 0, 0, 0, 0xde, 0xad ])); }); it('0xdeadbeef should equal 0xdeadbeef0000000000n (9 byte)', async () => { toBufferBE(BigInt(`0xdeadbeef`), 9).should.deep.equal(Buffer.from([ 0, 0, 0, 0, 0, 0xde, 0xad, 0xbe, 0xef ])); }); it('0xbadc0ffee0ddf00d should equal 0xbadc0ffee0ddf00dn (8 byte)', async () => { toBufferBE(BigInt(`0xbadc0ffee0ddf00d`), 8) .should.deep.equal( Buffer.from([0xba, 0xdc, 0x0f, 0xfe, 0xe0, 0xdd, 0xf0, 0x0d])); }); it('0xbadc0ffee0ddf00ddeadbeef should equal 0xbadc0ffee0ddf00ddeadbeefn', async () => { toBufferBE(BigInt(`0xbadc0ffee0ddf00ddeadbeef`), 12) .should.deep.equal(Buffer.from([ 0xba, 0xdc, 0x0f, 0xfe, 0xe0, 0xdd, 0xf0, 0x0d, 0xde, 0xad, 0xbe, 0xef ])); }); it('long value should equal long val', async () => { toBufferBE(BigInt(`0xbadc0ffee0ddf00ddeadbeefbadc0ffee0ddf00ddeadbeef`), 24) .should.deep.equal(Buffer.from([ 0xba, 0xdc, 0x0f, 0xfe, 0xe0, 0xdd, 0xf0, 0x0d, 0xde, 0xad, 0xbe, 0xef, 0xba, 0xdc, 0x0f, 0xfe, 0xe0, 0xdd, 0xf0, 0x0d, 0xde, 0xad, 0xbe, 0xef ])); }); });