import { describe, expect, test } from "vitest"; import { ConstString, Int, isHeadless, parse, Sequence, serialize, sizeof } from "../src"; import { expectDataViewEqual } from '.' import { filledDataView, sizedDataView } from '../src' describe(Sequence.name, () => { const Type = Sequence([Int(8, 'unsigned'), String, Boolean]) const type = [255, 'hello', true] const type_dv = filledDataView([ 0xFF, 0x00, 0x00, 0x00, 0x05, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x01, ]) test('serialize', () => { let actual = sizedDataView(10) expect(() => serialize(actual, type, Type)).toThrow() actual = sizedDataView(sizeof(type, Type)) serialize(actual, type, Type) expectDataViewEqual(actual, type_dv) }) test('parse', () => { expect(parse(type_dv, Type)).toEqual(type) }) test('isHeadless', () => { expect(isHeadless(Sequence([Number, String]))).toBeTruthy() expect(isHeadless(Sequence([Number, ConstString(4)]))).toBeFalsy() }) test('sizeof', () => { expect(sizeof(Sequence([Number, ConstString(4)]))).toEqual(12) expect(() => sizeof(Sequence([Number, String]))).toThrow() expect(() => sizeof([1], Sequence([Number, String]))).toThrow() expect(() => sizeof([1, 'hello', 3], Sequence([Number, String]))).toThrow() expect(sizeof([1, 'hello'], Sequence([Number, String]))).toEqual(17) }) })