javascript-binary-converter
Version:
A utility package to quickly handle and convert various Javascript binary objects
282 lines (188 loc) • 10.9 kB
text/typescript
import converter from "../../converter";
const { expect } = require('expect');
const { Blob } = require('node:buffer');
import { getBytes,extraSmallImageDecimalBytes,twosComplementExtraSmallImageBytes} from './test-utils';
describe('Node BytesConverter tests', () => {
it('Should return Uint8Array, and an Int8Array, from bytes', async function () {
var bytes = ['11111111', '00000001']
var uint8 = converter(bytes).toUint8Array()
expect(uint8 instanceof Uint8Array).toBe(true)
expect(uint8[0]).toBe(255)
expect(uint8[1]).toBe(1)
var bytes = ['10000000', '01110111', '11110111']
var int8 = converter(bytes).toInt8Array()
expect(int8 instanceof Int8Array).toBe(true)
expect(int8[0]).toBe(-128)
expect(int8[1]).toBe(119)
expect(int8[2]).toBe(-9)
});
it('Should return Uint8Array, and an Int8Array, from byte decimals', async function () {
var bytes = [255, 1]
var uint8 = converter(bytes).toUint8Array()
expect(uint8 instanceof Uint8Array).toBe(true)
expect(uint8[0]).toBe(255)
expect(uint8[1]).toBe(1)
var bytes = [128, 119, 247]
var int8 = converter(bytes).toInt8Array()
expect(int8 instanceof Int8Array).toBe(true)
expect(int8[0]).toBe(-128)
expect(int8[1]).toBe(119)
expect(int8[2]).toBe(-9)
var bytes = [-127, 119, -1]
var int8 = converter(bytes).toInt8Array()
expect(int8 instanceof Int8Array).toBe(true)
expect(int8[0]).toBe(-127)
expect(int8[1]).toBe(119)
expect(int8[2]).toBe(-1)
});
it('Should return Uint16Array, and an Int16Array, from bytes', async function () {
var bytes = ['11111111', '11111111', '00000000', '00000000']
var uint16 = converter(bytes).toUint16Array()
expect(uint16 instanceof Uint16Array).toBe(true)
expect(uint16[0]).toBe(65535)
expect(uint16[1]).toBe(0)
var bytes = ['10100110','00000001', ]//little endian
var uint16 = converter(bytes).toUint16Array()
expect(uint16 instanceof Uint16Array).toBe(true)
expect(uint16[0]).toBe(422)
var bytes = ['11111111', '11111111', '11110111', '11110111', '10000000', '00000000']//little endian
var int16 = converter(bytes).toInt16Array()
expect(int16 instanceof Int16Array).toBe(true)
expect(int16[0]).toBe(-1)
expect(int16[1]).toBe(-2057)
expect(int16[2]).toBe(128)
});
it('Should return an Int32Array, from bytes', async function () {
var bytes = ['10000000', '00000000', '00000000', '00000000', '11110111', '11110111', '11110111', '11110111', '01110111', '01110111', '01110111', '01110111']
var int32 = converter(bytes).toInt32Array()
expect(int32 instanceof Int32Array).toBe(true)
expect(int32[0]).toBe(128)
expect(int32[1]).toBe(-134744073)
expect(int32[2]).toBe(2004318071)
});
it('Should return a Uint32Array, from bytes', async function () {
var bytes = ['10000000', '00000000', '00000000', '00000000', '11110111', '11110111', '11110111', '11110111', '01110111', '01110111', '01110111', '01110111']
var uInt32 = converter(bytes).toUint32Array()
expect(uInt32 instanceof Uint32Array).toBe(true)
expect(uInt32[0]).toBe(128)
expect(uInt32[1]).toBe(4160223223)
expect(uInt32[2]).toBe(2004318071)
});
it('Should return a BigInt64Array, from bytes', async function () {
var bytes = ['10000000', '00000000', '00000000', '00000000', '11110111', '11110111', '11110111', '11110111','10000000', '00000000', '00000000', '00000000', '11110111', '11110111', '11110111', '11110111']
var int64 = converter(bytes).toBigInt64Array()
expect(int64 instanceof BigInt64Array).toBe(true)
expect(int64.length).toBe(2)
expect(int64[0]).toBe(-578721386864836480n)
expect(int64[1]).toBe(-578721386864836480n)
});
it('Should return a BigUint64Array, from bytes', async function () {
var bytes = ['10000000', '00000000', '00000000', '00000000', '11110111', '11110111', '11110111', '11110111','10000000', '00000000', '00000000', '00000000', '11110111', '11110111', '11110111', '11110111']
var int64 = converter(bytes).toBigUint64Array()
expect(int64 instanceof BigUint64Array).toBe(true)
expect(int64.length).toBe(2)
expect(int64[0].toString()).toBe('17868022686844715136')//
expect(int64[1].toString()).toBe('17868022686844715136')//
// expect(int64[1]).toBe(-17868022686844715136n)
});
it('Should return a Float32Array, from bytes', async function () {
var bytes = ['01000010', '00001010', '01000100', '10011100', '01000010', '00011010', '01000100', '10011100']
// '01000010000010100100010010011100','10011100010001000001101001000010'
// '10011100010001000000101001000010','01000010000110100100010010011100'//reverse byte order, default
var float32 = converter(bytes).toFloat32Array()
expect(float32[0].toString().includes('-6.48642')).toBe(true)
expect(float32[1].toString().includes('-6.488489')).toBe(true)
var bytes = ['11000010', '00001010', '01000100', '10011100']
// '11000010000010100100010010011100'
// '10011100010001000000101011000010' reverse, default
var float32 = converter(bytes).toFloat32Array()
expect(float32[0].toString().includes('-6.48648')).toBe(true)
var bytes = ['00111111', '00010001', '00100111', '00000000']
// 00111111000100010010011100000000
//00000000001001110001000100111111//reverse, default
var float32 = converter(bytes).toFloat32Array()
expect(float32[0].toString().includes('3.58777')).toBe(true)
var bytes = ['10111111', '00010001', '00100111', '00000000']
// 10111111000100010010011100000000
//00000000001001110001000110111111 //reverse, default
var float32 = converter(bytes).toFloat32Array()
expect(float32[0].toString().includes('3.58795')).toBe(true)
});
it('Should return a "ΆΆ" string, from bytes', async function () {
var bytes = ['11001110', '10000110', '11001110', '10000110']
var text = converter(bytes).toText()
expect(text).toBe('ΆΆ')
});
;
it('Should return a Blob, from bytes', async function () {
const bytes = getBytes()
var blob = await converter(bytes).toBlob()
expect(blob instanceof Blob).toBe(true)
expect(blob.size === bytes.length).toBe(true)
});
it('Should return integers, from bytes', async function () {
var bytes = getBytes()
// console.log('bytes', bytes)
var decimals = converter(bytes).toIntegers()
// console.log(decimals)
var decimalsCorrect = decimals.every((decimal, index) => extraSmallImageDecimalBytes[index] === decimal)
expect(decimalsCorrect).toBe(true)
var decimals = converter(bytes).toIntegers({ isSigned: true })
var decimalsCorrect = decimals.every((decimal, index) => twosComplementExtraSmallImageBytes[index] === decimal)
expect(decimalsCorrect).toBe(true)
var bytes = ['01010100', '01010100', '11010100', '01010100']
var decimals = converter(bytes).toIntegers({ isSigned: false, integerSize: 16 })
expect(decimals[0]).toBe(21588)
expect(decimals[1]).toBe(21716)
var decimals = converter(bytes).toIntegers({ isSigned: true, integerSize: 16 })
expect(decimals[0]).toBe(21588)
expect(decimals[1]).toBe(21716)
var bytes = ['11010100', '01010100', '11010100', '01010100']
//01010100110101000101010011010100
//01010100110101000101010011010100
var decimals = converter(bytes).toIntegers({ isSigned: false, integerSize: 32 })
expect(decimals[0]).toBe(1423201492)
var decimals = converter(bytes).toIntegers({ isSigned: true, integerSize: 32 })
expect(decimals[0]).toBe(1423201492)
});
it('Should return bigints, from bytes', async function () {
var bytes = ['10000000', '00000000', '00000000', '00000000', '11110111', '11110111', '11110111', '11110111','10000000', '00000000', '00000000', '00000000', '11110111', '11110111', '11110111', '11110111']
// TODO: explore endianess issue of all byte conversion
var decimals = converter(bytes).toIntegers({integerSize:64})
expect(decimals.length).toBe(2)//
expect(decimals[0].toString()).toBe("17868022686844715136")
expect(decimals[1].toString()).toBe("17868022686844715136")
decimals = converter(bytes).toIntegers({integerSize:64,isSigned:true})
expect(decimals.length).toBe(2)//
expect(decimals[0].toString()).toBe("-578721386864836480")
expect(decimals[1].toString()).toBe("-578721386864836480")
});
it('Should return integers, from partial bytes', async function () {
var bytes = getBytes()
var decimals = converter(bytes).toIntegers()
var decimalsCorrect = decimals.every((decimal, index) => extraSmallImageDecimalBytes[index] === decimal)
expect(decimalsCorrect).toBe(true)
var decimals = converter(bytes).toIntegers({ isSigned: true })
var decimalsCorrect = decimals.every((decimal, index) => twosComplementExtraSmallImageBytes[index] === decimal)
expect(decimalsCorrect).toBe(true)
var bytes = ['1010100', '1010100', '11010100', '1010100']
var decimals = converter(bytes).toIntegers({ isSigned: false, integerSize: 16 })
expect(decimals[0]).toBe(21588)
expect(decimals[1]).toBe(21716)
});
it('Should return an array of hex, from an array of bytes', async function () {
var bytes = ['11010100', '11111100', '10001000'] //-44,-4,-120 decimals in twos complement
var hexes = converter(bytes).toHexString()
expect(hexes[0]).toBe('D4')
expect(hexes[1]).toBe('FC')
expect(hexes[2]).toBe('88')
// console.log('hexes', hexes)
var hexes = converter(bytes).toHexString({ isSigned: true })
expect(hexes[0][hexes[0].length - 1]).toBe('4')
expect(hexes[0][hexes[0].length - 2]).toBe('D')
expect(hexes[1][hexes[1].length - 1]).toBe('C')
expect(hexes[1][hexes[1].length - 2]).toBe('F')
expect(hexes[2].includes('FF88')).toBe(true)
// console.log('hexes', hexes)
});
})