form 1 topics added
This commit is contained in:
73
lib/math/validation.test.ts
Normal file
73
lib/math/validation.test.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import {
|
||||
checkFractionAnswer,
|
||||
checkIntegerAnswer,
|
||||
checkDecimalAnswer,
|
||||
checkRatioAnswer,
|
||||
checkOrderingAnswer,
|
||||
} from "./validation";
|
||||
|
||||
describe("checkIntegerAnswer", () => {
|
||||
it("solves an exact match", () => {
|
||||
expect(checkIntegerAnswer(6, 6).status).toBe("solved");
|
||||
});
|
||||
it("rejects a wrong value", () => {
|
||||
expect(checkIntegerAnswer(5, 6).status).toBe("wrong");
|
||||
});
|
||||
});
|
||||
|
||||
describe("checkFractionAnswer", () => {
|
||||
it("solves a fully simplified answer", () => {
|
||||
expect(checkFractionAnswer(1, 2, 1, 2).status).toBe("solved");
|
||||
});
|
||||
|
||||
// Regression: 5/10 is the right value but unsimplified — it must NOT be treated
|
||||
// as fully solved (this is what let the score double-count before the fix).
|
||||
it("flags a correct but unsimplified answer", () => {
|
||||
expect(checkFractionAnswer(5, 10, 1, 2).status).toBe("unsimplified");
|
||||
});
|
||||
|
||||
it("accepts any non-zero denominator for zero", () => {
|
||||
expect(checkFractionAnswer(0, 5, 0, 1).status).toBe("solved");
|
||||
});
|
||||
|
||||
it("rejects a wrong value", () => {
|
||||
expect(checkFractionAnswer(3, 4, 1, 8).status).toBe("wrong");
|
||||
});
|
||||
|
||||
it("rejects a zero denominator", () => {
|
||||
const res = checkFractionAnswer(1, 0, 1, 2);
|
||||
expect(res.status).toBe("wrong");
|
||||
if (res.status === "wrong") expect(res.message).toMatch(/denominator/i);
|
||||
});
|
||||
});
|
||||
|
||||
describe("checkDecimalAnswer", () => {
|
||||
it("solves within tolerance", () => {
|
||||
expect(checkDecimalAnswer(3.14, 3.14).status).toBe("solved");
|
||||
});
|
||||
it("rejects outside tolerance", () => {
|
||||
expect(checkDecimalAnswer(3.2, 3.14).status).toBe("wrong");
|
||||
});
|
||||
});
|
||||
|
||||
describe("checkRatioAnswer", () => {
|
||||
it("solves an already-simplified ratio", () => {
|
||||
expect(checkRatioAnswer([1, 2], [1, 2]).status).toBe("solved");
|
||||
});
|
||||
it("flags an equivalent but unsimplified ratio", () => {
|
||||
expect(checkRatioAnswer([2, 4], [1, 2]).status).toBe("unsimplified");
|
||||
});
|
||||
it("rejects a non-equivalent ratio", () => {
|
||||
expect(checkRatioAnswer([1, 3], [1, 2]).status).toBe("wrong");
|
||||
});
|
||||
});
|
||||
|
||||
describe("checkOrderingAnswer", () => {
|
||||
it("solves a correct ascending order", () => {
|
||||
expect(checkOrderingAnswer([-10, -8, -6, -4, -3, 5], [-10, -8, -6, -4, -3, 5]).status).toBe("solved");
|
||||
});
|
||||
it("rejects a wrong order", () => {
|
||||
expect(checkOrderingAnswer([5, -10], [-10, 5]).status).toBe("wrong");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user