javascript-binary-converter
Version:
A utility package to quickly handle and convert various Javascript binary objects
230 lines (160 loc) • 8.14 kB
text/typescript
import { expect } from "expect";
import { binaryToInteger, groupBytes, bigIntegerToBinary, floatToBinary } from "../../utils/binary";
import { integerToHexaDecimal } from "../../utils/hex";
import { getClosestDividable } from "../../utils/number";
describe('Node binary utils tests', () => {
it('Uint8: Should return correct numbers from a string of 8 bits', async function () {
var decimal = binaryToInteger('11111111')
expect(decimal).toBe(255)
var decimal = binaryToInteger('001')
expect(decimal).toBe(1)
var decimal = binaryToInteger('00101')
expect(decimal).toBe(5)
var decimal = binaryToInteger('101')
expect(decimal).toBe(5)
});
// it('Uint8: Should return correct numbers from bits', async function () {
// var decimal = binaryToInteger(11111111)
// expect(decimal).toBe(255)
// var decimal = binaryToInteger(001)
// expect(decimal).toBe(1)
// var decimal = binaryToInteger(00101)
// expect(decimal).toBe(5)
// var decimal = binaryToInteger(101)
// expect(decimal).toBe(5)
// });
it('Uint16: Should return 65535 from a string of 16 bits', async function () {
const decimal = binaryToInteger('1111111111111111')
expect(decimal).toBe(65535)
});
it('Uint32: Should return 4294967295 from a string of 32 bits', async function () {
const decimal = binaryToInteger('11111111111111111111111111111111')
expect(decimal).toBe(4294967295)
});
it('Int8: Should return correct numbers from a string of 8 bits', async function () {
var decimal = binaryToInteger('10000000', true)
expect(decimal).toBe(-128)
var decimal = binaryToInteger('00000000', true)
expect(decimal).toBe(0)
var decimal = binaryToInteger('11111111', true)
expect(decimal).toBe(-1)
var decimal = binaryToInteger('11110111', true)
expect(decimal).toBe(-9)
var decimal = binaryToInteger('01110111', true)
expect(decimal).toBe(119)
});
it('Int16: Should return correct numbers from a string of 16 bits', async function () {
var decimal = binaryToInteger('1000000010000000', true)
expect(decimal).toBe(-32640)
var decimal = binaryToInteger('0000000000000000', true)
expect(decimal).toBe(0)
var decimal = binaryToInteger('1111111111111111', true)
expect(decimal).toBe(-1)
var decimal = binaryToInteger('1111011111110111', true)
expect(decimal).toBe(-2057)
var decimal = binaryToInteger('0111011101110111', true)
expect(decimal).toBe(30583)
});
it('Int32: Should return correct numbers from a string of 32 bits', async function () {
var decimal = binaryToInteger('10000000000000000000000000000000', true)
expect(decimal).toBe(-2147483648)
var decimal = binaryToInteger('00000000000000000000000000000000', true)
expect(decimal).toBe(0)
var decimal = binaryToInteger('11111111111111111111111111111111', true)
expect(decimal).toBe(-1)
var decimal = binaryToInteger('11110111111101111111011111110111', true)
expect(decimal).toBe(-134744073)
var decimal = binaryToInteger('01110111011101110111011101110111', true)
expect(decimal).toBe(2004318071)
});
it('Should create arrays of 16 bits, from an array of 8 bits', async function () {
// await timeout()
var bytes = ['11101111', '10111111', '00000001', '00000000']
var joined = groupBytes(bytes, 2)
expect(joined.length).toBe(2)
expect(joined[0]).toBe('1110111110111111')
expect(joined[1]).toBe('0000000100000000')
var bytes = ['11101111', '10111111', '00000001', '00000000', '11101001', '00111111', '00110001', '00001000']
var joined = groupBytes(bytes, 2)
expect(joined.length).toBe(4)
expect(joined[0]).toBe('1110111110111111')
expect(joined[1]).toBe('0000000100000000')
expect(joined[2]).toBe('1110100100111111')
expect(joined[3]).toBe('0011000100001000')
});
it('Should create arrays of 32 bits, from an array of 8 bits', async function () {
// await timeout()
var bytes = ['11101111', '10111111', '00000001', '00000000']
var joined = groupBytes(bytes, 4)
expect(joined.length).toBe(1)
expect(joined[0]).toBe('11101111101111110000000100000000')
var bytes = ['11101111', '10111111', '00000001', '00000000', '11101001', '00111111', '00110001', '00001000']
var joined = groupBytes(bytes, 4)
expect(joined.length).toBe(2)
expect(joined[0]).toBe('11101111101111110000000100000000')
expect(joined[1]).toBe('11101001001111110011000100001000')
});
it('Should return hex, from decimal', async function () {
var decimal = 1234
var hex = integerToHexaDecimal(decimal)
expect(hex).toBe('4D2')
var decimal = -1234
var hex = integerToHexaDecimal(decimal)
expect(hex).toBe('FFFFFB2E')
var decimal = -1234534543
var hex = integerToHexaDecimal(decimal)
expect(hex).toBe('B66A7F71')
});
it('Should closest dividable', async function () {//
let closest = getClosestDividable(14, 8)
expect(closest).toBe(16)
closest = getClosestDividable(1, 8)
expect(closest).toBe(8)
closest = getClosestDividable(7, 8)
expect(closest).toBe(8)
closest = getClosestDividable(15, 8)
expect(closest).toBe(16)
closest = getClosestDividable(16, 8)
expect(closest).toBe(16)
closest = getClosestDividable(30, 8)
expect(closest).toBe(32)
});
it('Should return binary from bigint', async function () {//
// 184467440737095516
// let binary = integerToBinary(4294967295)//max 32 bit number
// let binary = integerToBinary(4294967296) //above 32 bit
let binary = bigIntegerToBinary(184467440737095516n)
expect(binary).toBe('1010001111010111000010100011110101110000101000111101011100')
binary = bigIntegerToBinary(8844674407370955)
expect(binary).toBe('11111011011000010111100111100001101001001000011001011')
binary = bigIntegerToBinary(-2157483648)//
expect(binary).toBe('1111111111111111111111111111111101111111011001110110100110000000')
binary = bigIntegerToBinary(-3157483648434)//
expect(binary).toBe('1111111111111111111111010010000011010111010011110000101001001110')
});
it('Should return binary from float', async function () {
let binary = floatToBinary(1.1)
expect(binary).toBe('00111111100011001100110011001101')
binary = floatToBinary(0.43431)
expect(binary).toBe('00111110110111100101110111100001')
binary = floatToBinary(-0.43431)
expect(binary).toBe('10111110110111100101110111100001')
binary = floatToBinary(65.43431)
expect(binary).toBe('01000010100000101101111001011110')
binary = floatToBinary(-65.43431)
expect(binary).toBe('11000010100000101101111001011110')
});
// it('Should remove redundant significant bytes', async function () {//
// const bytes = ['00010001', '00101000', '00001000', '00000000']
// let cleanBytes = removeRedundantSignificantBytes(bytes,'LITTLE')
// expect(bytes[0]).toBe('00010001')
// expect(cleanBytes.length).toBe(3)
// cleanBytes = removeRedundantSignificantBytes(bytes,'BIG')
// expect(bytes[0]).toBe('00001000')
// expect(cleanBytes.length).toBe(3)
// });
// it('Should trim unnecessary first bytes ', async function () {
// let bytes;
// const decimal = integerToBinary()
// });
})