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/); }); });