feat: add contextual layer inspector
This commit is contained in:
40
renderer/rotated-rect.test.ts
Normal file
40
renderer/rotated-rect.test.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { rotatedRectBounds, rotatedRectCorners } from "./rotated-rect";
|
||||
|
||||
describe("rotated rectangle geometry", () => {
|
||||
test("interprets rotation as radians and keeps the center anchored", () => {
|
||||
const corners = rotatedRectCorners({ x: 10, y: 20, w: 40, h: 20 }, Math.PI / 2);
|
||||
|
||||
expectPoint(corners[0], { x: 40, y: 10 });
|
||||
expectPoint(corners[1], { x: 40, y: 50 });
|
||||
expectPoint(corners[2], { x: 20, y: 10 });
|
||||
expectPoint(corners[3], { x: 20, y: 50 });
|
||||
expect((corners[0].x + corners[3].x) / 2).toBeCloseTo(30);
|
||||
expect((corners[0].y + corners[3].y) / 2).toBeCloseTo(30);
|
||||
});
|
||||
|
||||
test("expands axis-aligned clipping bounds around a rotated quad", () => {
|
||||
const bounds = rotatedRectBounds({ x: 10, y: 20, w: 40, h: 20 }, Math.PI / 2);
|
||||
|
||||
expect(bounds.x).toBeCloseTo(20);
|
||||
expect(bounds.y).toBeCloseTo(10);
|
||||
expect(bounds.w).toBeCloseTo(20);
|
||||
expect(bounds.h).toBeCloseTo(40);
|
||||
});
|
||||
|
||||
test("preserves an unrotated rectangle exactly", () => {
|
||||
const rect = { x: 10, y: 20, w: 40, h: 20 };
|
||||
expect(rotatedRectBounds(rect, 0)).toBe(rect);
|
||||
expect(rotatedRectCorners(rect, 0)).toEqual([
|
||||
{ x: 10, y: 20 },
|
||||
{ x: 50, y: 20 },
|
||||
{ x: 10, y: 40 },
|
||||
{ x: 50, y: 40 },
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
function expectPoint(actual: { x: number; y: number }, expected: { x: number; y: number }) {
|
||||
expect(actual.x).toBeCloseTo(expected.x);
|
||||
expect(actual.y).toBeCloseTo(expected.y);
|
||||
}
|
||||
Reference in New Issue
Block a user