feat(frontend): constellation lib scaffold — graph/layout/camera pure modules (tested)

This commit is contained in:
asepharyana committed 2026-08-24 14:46:38 +07:00
1 parent 16becd5340
commit 3d4236e8df
8 files changed
+550

No files matched your search

@@ -0,0 +1,49 @@
import { describe, expect, test } from "bun:test";
import { fitCamera, flyTo } from "./camera";
describe("flyTo", () => {
const from = { x: 0, y: 0, z: 1 };
const to = { x: 100, y: -50, z: 2 };
test("t=0 returns origin", () => {
expect(flyTo(from, to, 0)).toEqual({ x: 0, y: 0, z: 1 });
});
test("t=1 arrives exactly", () => {
expect(flyTo(from, to, 1)).toEqual(to);
});
test("monotonic progress", () => {
let prev = -Infinity;
for (let i = 0; i <= 20; i++) {
const s = flyTo(from, to, i / 20);
expect(s.x).toBeGreaterThan(prev);
prev = s.x;
}
});
test("clamps out-of-range t", () => {
expect(flyTo(from, to, -3)).toEqual(from);
expect(flyTo(from, to, 7)).toEqual(to);
});
});
describe("fitCamera", () => {
test("empty scene centers", () => {
const c = fitCamera([], 800, 600);
expect(c.x).toBe(400);
expect(c.y).toBe(300);
});
test("zooms to fit nodes with padding", () => {
const nodes = [
{ x: 100, y: 100, r: 10 },
{ x: 500, y: 400, r: 10 },
];
const c = fitCamera(nodes, 800, 600);
expect(c.x).toBe(300);
expect(c.y).toBe(250);
expect(c.z).toBeGreaterThan(0);
expect(c.z).toBeLessThanOrEqual(3);
});
});