import { describe, test, expect } from 'vitest' import { filledDataView, sizedDataView } from '.' import { parse, serialize, sizeof, sizeofHead } from '../src' import { ConstArray, ConstString } from '../src/type' describe('serialize', () => { test('Number', () => { const expected = filledDataView([0x40, 0x97, 0xF2, 0x80, 0x00, 0x00, 0x00, 0x00]) let dv = sizedDataView(7) expect(() => serialize(dv, 0, Number)).toThrow() dv = sizedDataView(sizeof(Number)) expect(8).toEqual(dv.byteLength) serialize(dv, 1532.625, Number) expect(dv).toEqual(expected) }) test('ConstString', () => { const expected = filledDataView([0x68, 0x65, 0x6C, 0x00, 0x00]) let dv = sizedDataView(4) expect(() => serialize(dv, 'hello', ConstString(5))).toThrow() dv = sizedDataView(5) serialize(dv, 'hello', ConstString(3)) expect(dv).toEqual(expected) }) test('String', () => { const expected = filledDataView([ 0x00, 0x00, 0x00, 0x05, 0x68, 0x65, 0x6C, 0x6C, 0x6F, ]) let dv = sizedDataView(8) expect(() => serialize(dv, 'hello', String)).toThrow() dv = sizedDataView(sizeof('hello')) expect(9).toEqual(dv.byteLength) serialize(dv, 'hello', String) expect(dv).toEqual(expected) }) test('ConstArray, Number', () => { const expected = filledDataView([ 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ]) let dv = sizedDataView(15) expect(() => serialize(dv, [1, 2], ConstArray(2), Number)).toThrow() dv = sizedDataView(sizeof(ConstArray(2), Number)) expect(16).toEqual(dv.byteLength) serialize(dv, [1, 2], ConstArray(2), Number) expect(dv).toEqual(expected) }) test('Array, Number', () => { const expected = filledDataView([ 0x00, 0x00, 0x00, 0x02, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ]) let dv = sizedDataView(19) expect(() => serialize(dv, [1, 2], Array, Number)).toThrow() dv = sizedDataView(sizeof([1, 2])) expect(20).toEqual(dv.byteLength) serialize(dv, [1, 2], Array, Number) expect(dv).toEqual(expected) }) }) describe('parse', () => { test('Number', () => { const expected = 1532.625 const dv = filledDataView([0x40, 0x97, 0xF2, 0x80, 0x00, 0x00, 0x00, 0x00]) const actual = parse(dv, Number) expect(actual).toEqual(expected) }) test('ConstString', () => { const expected = 'hel' const dv = filledDataView([0x68, 0x65, 0x6C, 0x6C, 0x6F]) const actual = parse(dv, ConstString(3)) expect(actual).toEqual(expected) }) test('String', () => { const expected = 'hello' const dv = filledDataView([ 0x00, 0x00, 0x00, 0x05, 0x68, 0x65, 0x6C, 0x6C, 0x6F ]) const actual = parse(dv, String) expect(actual).toEqual(expected) }) test('ConstArray, Number', () => { const expected = [1, 2] const dv = filledDataView([ 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ]) const actual = parse(dv, ConstArray(2), Number) expect(actual).toEqual(expected) }) test('Array, Number', () => { const expected = [1, 2] const dv = filledDataView([ 0x00, 0x00, 0x00, 0x02, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ]) const actual = parse(dv, Array, Number) expect(actual).toEqual(expected) }) }) describe('sizeofHead', () => { test('Number', () => { expect(sizeofHead(Number)).toEqual(8) expect(sizeofHead(1)).toEqual(8) }) test('ConstString', () => { expect(sizeofHead(ConstString(2))).toEqual(2) }) test('String', () => { expect(sizeofHead(String)).toEqual(4) expect(sizeofHead('s')).toEqual(4) }) test('ConstArray', () => { expect(sizeofHead(ConstArray(2), Number)).toEqual(16) }) test('Array', () => { expect(sizeofHead(Array, Number)).toEqual(4) expect(sizeofHead([1])).toEqual(4) }) }) describe('sizeof', () => { test('unknown', () => { expect(() => sizeof(String)).toThrow() expect(() => sizeof(Array, Number)).toThrow() }) })