import { describe, expect, it } from "vitest"; import { packMotionPlans, unpackMotionPlans, } from "../src/core/game/MotionPlans"; describe("MotionPlans grid_segments", () => { it("packs/unpacks grid_segments", () => { const packed = packMotionPlans([ { kind: "grid_segments", unitId: 123, planId: 7, startTick: 10, ticksPerStep: 2, points: Uint32Array.from([1, 6, 11]), segmentSteps: Uint32Array.from([5, 5]), }, ]); const records = unpackMotionPlans(packed); expect(records).toHaveLength(1); const r = records[0]; expect(r.kind).toBe("grid_segments"); if (r.kind !== "grid_segments") throw new Error("type guard"); expect(r.unitId).toBe(123); expect(r.planId).toBe(7); expect(r.startTick).toBe(10); expect(r.ticksPerStep).toBe(2); expect(Array.from(r.points)).toEqual([1, 6, 11]); expect(Array.from(r.segmentSteps)).toEqual([5, 5]); }); it("packs/unpacks parabola records", () => { const packed = packMotionPlans([ { kind: "parabola", unitId: 44, planId: 3, startTick: 99, src: 10, dst: 20, increment: 7, distanceBasedHeight: true, directionUp: false, }, ]); const records = unpackMotionPlans(packed); expect(records).toHaveLength(1); const r = records[0]; expect(r.kind).toBe("parabola"); if (r.kind !== "parabola") throw new Error("type guard"); expect(r.unitId).toBe(44); expect(r.planId).toBe(3); expect(r.startTick).toBe(99); expect(r.src).toBe(10); expect(r.dst).toBe(20); expect(r.increment).toBe(7); expect(r.distanceBasedHeight).toBe(true); expect(r.directionUp).toBe(false); }); it("skips unknown kinds using wordCount", () => { const gridPacked = packMotionPlans([ { kind: "grid_segments", unitId: 1, planId: 1, startTick: 1, ticksPerStep: 1, points: Uint32Array.from([10, 12]), segmentSteps: Uint32Array.from([2]), }, ]); const gridRecordWords = gridPacked.slice(1); // strip recordCount const unknownWordCount = 4; const out = new Uint32Array(1 + unknownWordCount + gridRecordWords.length); out[0] = 2; let o = 1; out[o++] = 999; out[o++] = unknownWordCount; out[o++] = 111; out[o++] = 222; out.set(gridRecordWords, o); const records = unpackMotionPlans(out); expect(records).toHaveLength(1); expect(records[0].kind).toBe("grid_segments"); }); });