feat(Struct)
This commit is contained in:
34
test/ConstArray.test.js
Normal file
34
test/ConstArray.test.js
Normal file
@ -0,0 +1,34 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
import { ConstArray, parse, serialize, sizeof, sizeofHead } from "../src";
|
||||
import { filledDataView, sizedDataView } from ".";
|
||||
|
||||
describe(ConstArray.name, () => {
|
||||
test('serialize, 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('parse, 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('sizeof', () => {
|
||||
expect(sizeofHead(ConstArray(2), Number)).toEqual(16)
|
||||
})
|
||||
})
|
||||
27
test/ConstString.test.js
Normal file
27
test/ConstString.test.js
Normal file
@ -0,0 +1,27 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
import { ConstString, parse, serialize, sizeofHead } from "../src";
|
||||
import { filledDataView, sizedDataView } from ".";
|
||||
|
||||
describe(ConstString.name, () => {
|
||||
test('serialize', () => {
|
||||
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('parse', () => {
|
||||
const expected = 'hel'
|
||||
const dv = filledDataView([0x68, 0x65, 0x6C, 0x6C, 0x6F])
|
||||
const actual = parse(dv, ConstString(3))
|
||||
expect(actual).toEqual(expected)
|
||||
})
|
||||
|
||||
test('sizeof', () => {
|
||||
expect(sizeofHead(ConstString(2))).toEqual(2)
|
||||
})
|
||||
})
|
||||
70
test/Struct.test.js
Normal file
70
test/Struct.test.js
Normal file
@ -0,0 +1,70 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
import { parse, serialize, sizeof, Struct } from "../src";
|
||||
import { filledDataView, sizedDataView } from ".";
|
||||
|
||||
describe(Struct.name, () => {
|
||||
|
||||
const User = Struct({ age: Number, name: String })
|
||||
const user = { age: 1, name: 'hello' }
|
||||
const user_dv = filledDataView([
|
||||
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x0C,
|
||||
0x00, 0x00, 0x00, 0x05,
|
||||
0x68, 0x65, 0x6C, 0x6C, 0x6F,
|
||||
])
|
||||
|
||||
test('serialize, headless', () => {
|
||||
expect(() => sizeof(User)).toThrow()
|
||||
|
||||
const dv = sizedDataView(sizeof(user, User))
|
||||
expect(21).toEqual(dv.byteLength)
|
||||
|
||||
serialize(dv, user, User)
|
||||
expect(dv).toEqual(user_dv)
|
||||
})
|
||||
|
||||
test('parse, headless', () => {
|
||||
expect(parse(user_dv, User)).toEqual(user)
|
||||
})
|
||||
|
||||
const Vector2 = Struct({ x: Number, y: Number })
|
||||
const vector2 = { x: 1, y: 2 }
|
||||
const vector2_dv = filledDataView([
|
||||
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
])
|
||||
|
||||
test('serialize, non-headless', () => {
|
||||
const dv = sizedDataView(sizeof(Vector2))
|
||||
expect(16).toEqual(dv.byteLength)
|
||||
|
||||
serialize(dv, vector2, Vector2)
|
||||
expect(dv).toEqual(vector2_dv)
|
||||
})
|
||||
|
||||
test('parse, non-headless', () => {
|
||||
expect(parse(vector2_dv, Vector2)).toEqual(vector2)
|
||||
})
|
||||
|
||||
const Nested = Struct({ user: User, vector2: [Vector2] })
|
||||
const nested = { user, vector2 }
|
||||
const nested_dv = filledDataView([
|
||||
0x00, 0x00, 0x00, 0x14,
|
||||
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x0C,
|
||||
0x00, 0x00, 0x00, 0x05,
|
||||
0x68, 0x65, 0x6C, 0x6C, 0x6F,
|
||||
])
|
||||
|
||||
test('serialize, nested', () => {
|
||||
const dv = sizedDataView(sizeof(nested, Nested))
|
||||
serialize(dv, nested, Nested)
|
||||
expect(dv).toEqual(nested_dv)
|
||||
})
|
||||
|
||||
test('parse, nested', () => {
|
||||
expect(parse(nested_dv, Nested)).toEqual(nested)
|
||||
})
|
||||
})
|
||||
@ -1,7 +1,6 @@
|
||||
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', () => {
|
||||
@ -15,16 +14,6 @@ describe('serialize', () => {
|
||||
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,
|
||||
@ -39,20 +28,6 @@ describe('serialize', () => {
|
||||
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,
|
||||
@ -77,12 +52,6 @@ describe('parse', () => {
|
||||
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([
|
||||
@ -92,15 +61,6 @@ describe('parse', () => {
|
||||
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([
|
||||
@ -116,21 +76,15 @@ describe('parse', () => {
|
||||
describe('sizeofHead', () => {
|
||||
test('Number', () => {
|
||||
expect(sizeofHead(Number)).toEqual(8)
|
||||
expect(sizeofHead(1)).toEqual(8)
|
||||
})
|
||||
test('ConstString', () => {
|
||||
expect(sizeofHead(ConstString(2))).toEqual(2)
|
||||
expect(sizeofHead(1, Number)).toEqual(8)
|
||||
})
|
||||
test('String', () => {
|
||||
expect(sizeofHead(String)).toEqual(4)
|
||||
expect(sizeofHead('s')).toEqual(4)
|
||||
})
|
||||
test('ConstArray', () => {
|
||||
expect(sizeofHead(ConstArray(2), Number)).toEqual(16)
|
||||
expect(sizeofHead('s', String)).toEqual(4)
|
||||
})
|
||||
test('Array', () => {
|
||||
expect(sizeofHead(Array, Number)).toEqual(4)
|
||||
expect(sizeofHead([1])).toEqual(4)
|
||||
expect(sizeofHead([1], Array, Number)).toEqual(4)
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user