import { describe, expect, it } from "vitest"; import { createElc } from "../src/domain/elc"; import { wireMatrixKeys } from "../src/domain/elcMatrix"; describe("wireMatrixKeys", () => { it("assigns row-major pins and diode without mutating source", () => { const source = createElc({ source: "test", checksum: "" }); const next = wireMatrixKeys( source, ["k1", "k2", "k3"], ["MCU.GP0", "MCU.GP1"], ["MCU.GP2", "MCU.GP3"], "a-to-b", ); expect(next.keys.map((w) => w.detect === "contact" && [w.terminals.a, w.terminals.b, w.diode])).toEqual([ ["MCU.GP0", "MCU.GP2", "a-to-b"], ["MCU.GP0", "MCU.GP3", "a-to-b"], ["MCU.GP1", "MCU.GP2", "a-to-b"], ]); expect(source.keys).toEqual([]); }); it("rejects an undersized matrix", () => { expect(() => wireMatrixKeys(createElc({ source: "test", checksum: "" }), ["a", "b"], ["R"], ["C"]), ).toThrow(); }); it("preserves extension fields when updating existing wiring", () => { const source = { ...createElc({ source: "test", checksum: "" }), keys: [ { key: "k1", detect: "contact" as const, terminals: { a: "OLD.R", b: "OLD.C" }, extension: "keep", }, ], }; const next = wireMatrixKeys(source, ["k1"], ["R"], ["C"]); expect(next.keys[0]).toMatchObject({ extension: "keep", terminals: { a: "R", b: "C" } }); }); });