import { describe, expect, it } from "vitest"; import { answersMatch, normalizeAnswer, solveAnswerHit } from "./answer-match"; describe("normalizeAnswer", () => { it("分数转小数", () => { expect(normalizeAnswer("1/2")).toBe("0.5"); expect(normalizeAnswer("2/4")).toBe("0.5"); }); it("百分数转小数", () => { expect(normalizeAnswer("50%")).toBe("0.5"); }); it("小数去尾零", () => { expect(normalizeAnswer("0.50")).toBe("0.5"); }); it("整数原样", () => { expect(normalizeAnswer("10")).toBe("10"); }); it("文本去空白/全角/大小写", () => { expect(normalizeAnswer("ABC")).toBe("abc"); expect(normalizeAnswer("10 个")).toBe("10个"); }); }); describe("answersMatch", () => { it("等值命中:1/2 ≡ 0.5", () => { expect(answersMatch(["0.5", "1/2"], "1/2")).toBe(true); expect(answersMatch(["0.5"], "0.50")).toBe(true); }); it("百分数命中", () => { expect(answersMatch(["0.5"], "50%")).toBe(true); }); it("文本大小写/全角不敏感", () => { expect(answersMatch(["across"], "ACROSS")).toBe(true); }); it("单位严格:10个 ≠ 10", () => { expect(answersMatch(["10个"], "10")).toBe(false); expect(answersMatch(["10", "10个"], "10个")).toBe(true); }); it("空白答案不判对", () => { expect(answersMatch(["0.5"], " ")).toBe(false); }); it("空期望数组不判对", () => { expect(answersMatch([], "0.5")).toBe(false); }); }); describe("solveAnswerHit", () => { const q = { answers: ["2", "x=2"] }; it("命中最终答案", () => { expect(solveAnswerHit({ answers: ["2"] }, "2")).toBe(true); expect(solveAnswerHit(q, " x = 2 ")).toBe(true); }); it("未命中", () => { expect(solveAnswerHit(q, "3")).toBe(false); expect(solveAnswerHit({ answers: [] }, "2")).toBe(false); }); });