import { describe, expect, it } from "vitest"; import { colorSpectrum, drawGrid, randomColorBlocks } from "./gen-tools"; describe("colorSpectrum", () => { it("горизонтальный: левый край красный (hue 0)", () => { const img = colorSpectrum(100, 10, "horizontal", 100, 50); expect(img.data[0]).toBeGreaterThan(200); expect(img.data[1]).toBeLessThan(60); }); it("вертикальный: зелёный максимум около hue 120°", () => { const img = colorSpectrum(10, 100, "vertical", 100, 50); const rowHue120 = Math.round((120 / 360) * 99); const g = img.data[(rowHue120 * 10 + 5) * 4 + 1]; expect(g).toBeGreaterThan(200); }); }); describe("randomColorBlocks", () => { it("детерминирован по seed и блоки однотонные", () => { const a = randomColorBlocks(64, 64, 16, 7); const b = randomColorBlocks(64, 64, 16, 7); expect([...a.data]).toEqual([...b.data]); const c = randomColorBlocks(64, 64, 16, 8); expect([...a.data]).not.toEqual([...c.data]); expect(a.data[3]).toBe(255); }); }); describe("drawGrid", () => { it("линии на пересечениях непрозрачны, фон прозрачен", () => { const out = drawGrid(100, 100, 4, 4, 2, "#000000", true); expect(out.data[0]).toBe(0); expect(out.data[3]).toBe(255); // (0,0) на линии const mid = (53 * 100 + 53) * 4; expect(out.data[mid + 3]).toBe(0); // между линиями прозрачн }); it("белый непрозрачный фон при transparentBg=false", () => { const out = drawGrid(20, 20, 2, 2, 1, "#000000", false); const mid = (5 * 20 + 5) * 4; expect(out.data[mid]).toBe(255); }); });