meat/tests/render-protocol.test.ts

39 lines
1.6 KiB
TypeScript
Raw Normal View History

import { expect, test } from "bun:test"
import { RenderProtocol } from "../engine/render/RenderProtocol"
import type { RenderInstance } from "../engine/render/RenderScene"
import type { Camera } from "../engine/scene/Camera"
test("render camera protocol owns its complete shared layout", () => {
const input: Camera = { position: { x: 1, y: 2, z: 3 }, yaw: 4, pitch: 5, fov: 6 }
const data = new Float64Array(RenderProtocol.CAMERA_LENGTH)
RenderProtocol.writeCamera(data, input, 7)
const output = RenderProtocol.readCamera(data)
expect(output).toEqual({ camera: input, time: 7 })
expect(RenderProtocol.VIEW_PROJECTION_LENGTH).toBe(16)
})
test("render instance protocol round-trips scene-local prototype indexes", () => {
const input: RenderInstance[] = [
{ prototype: 2, x: 1.25, y: -2, z: 3.5, heading: 0.75, scale: 1.5 },
{ prototype: 0, x: -4, y: 5.25, z: 6, heading: -0.5, scale: 0.625 },
]
const ids = new Int32Array(2)
const transforms = new Float32Array(2 * RenderProtocol.TRANSFORM_FLOATS)
const output: RenderInstance[] = []
const count = RenderProtocol.writeInstances(ids, transforms, input)
RenderProtocol.readInstances(ids, transforms, count, output)
expect(output).toHaveLength(input.length)
for (let i = 0; i < input.length; i++) {
expect(output[i].prototype).toBe(input[i].prototype)
expect(output[i].x).toBeCloseTo(input[i].x)
expect(output[i].y).toBeCloseTo(input[i].y)
expect(output[i].z).toBeCloseTo(input[i].z)
expect(output[i].heading).toBeCloseTo(input[i].heading)
expect(output[i].scale).toBeCloseTo(input[i].scale)
}
})