import { expect, test } from "vitest"; import { vec } from "./given.ts"; import { integrate } from "./motion.ts"; test("integrate advances position by velocity * delta", () => { // velocity 0.1 units/ms, 100ms => move 10 units expect(integrate(vec(0, 0), vec(0.1, 0), 100)).toEqual({ x: 10, y: 0 }); }); test("zero delta does not move", () => { expect(integrate(vec(5, 5), vec(0.1, 0.1), 0)).toEqual({ x: 5, y: 5 }); }); test("framerate independence: one big step == many small steps", () => { const start = vec(0, 0); const vel = vec(0.1, -0.05); const oneBigStep = integrate(start, vel, 16); let manySmall = start; for (let i = 0; i < 16; i++) { manySmall = integrate(manySmall, vel, 1); } expect(manySmall.x).toBeCloseTo(oneBigStep.x); expect(manySmall.y).toBeCloseTo(oneBigStep.y); });