45 lines
1.6 KiB
TypeScript
45 lines
1.6 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
assertEvooEyeBrandLock,
|
|
EVOO_EYE_ASYMMETRY_MIN_RATIO,
|
|
EVOO_EYE_BIG_CX,
|
|
EVOO_EYE_BIG_CY,
|
|
EVOO_EYE_BIG_R,
|
|
EVOO_EYE_CENTER_SPACING_RATIO,
|
|
EVOO_EYE_SMALL_CX,
|
|
EVOO_EYE_SMALL_CY,
|
|
EVOO_EYE_SMALL_R,
|
|
EVOO_OO_TRADEMARK,
|
|
EVOO_PUPIL_BIG_R,
|
|
EVOO_PUPIL_SMALL_R,
|
|
} from "./brand-lock.js";
|
|
|
|
describe("evOo Oo brand lock", () => {
|
|
it("documents the trademark string", () => {
|
|
expect(EVOO_OO_TRADEMARK).toBe("Oo trademark = asymmetric Kulleraugen + size difference");
|
|
});
|
|
|
|
it("keeps big eye strictly larger than small eye (trademark asymmetry)", () => {
|
|
expect(EVOO_EYE_BIG_R).toBeGreaterThan(EVOO_EYE_SMALL_R);
|
|
expect(EVOO_EYE_BIG_R / EVOO_EYE_SMALL_R).toBeGreaterThanOrEqual(EVOO_EYE_ASYMMETRY_MIN_RATIO);
|
|
assertEvooEyeBrandLock();
|
|
});
|
|
|
|
it("keeps pupil asymmetry aligned with sclera", () => {
|
|
expect(EVOO_PUPIL_BIG_R).toBeGreaterThan(EVOO_PUPIL_SMALL_R);
|
|
expect(EVOO_PUPIL_BIG_R / EVOO_PUPIL_SMALL_R).toBeCloseTo(EVOO_EYE_BIG_R / EVOO_EYE_SMALL_R, 1);
|
|
});
|
|
|
|
it("places mascot eyes at the logo spacing ratio", () => {
|
|
const centerDistance = EVOO_EYE_SMALL_CX - EVOO_EYE_BIG_CX;
|
|
const sumRadii = EVOO_EYE_BIG_R + EVOO_EYE_SMALL_R;
|
|
expect(centerDistance / sumRadii).toBeCloseTo(EVOO_EYE_CENTER_SPACING_RATIO, 3);
|
|
expect(EVOO_EYE_SMALL_CY).toBeCloseTo(EVOO_EYE_BIG_CY + ((60 - 52) / 34) * EVOO_EYE_BIG_R, 1);
|
|
});
|
|
|
|
it("rejects symmetrized eye radii", () => {
|
|
expect(() => assertEvooEyeBrandLock(20, 20)).toThrow(/asymmetric Kulleraugen/);
|
|
expect(() => assertEvooEyeBrandLock(20, 19)).toThrow(/asymmetry ratio/);
|
|
});
|
|
});
|