58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
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);
|
|
});
|
|
});
|