40 lines
1.6 KiB
TypeScript
40 lines
1.6 KiB
TypeScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { loadCorpus, hashCorpus } from "../../../open-sse/services/compression/eval/corpus.ts";
|
|
import type { EvalCase } from "../../../open-sse/services/compression/eval/types.ts";
|
|
|
|
const cases: EvalCase[] = [
|
|
{ id: "a", kind: "prose", context: "hello world", question: "what is it?" },
|
|
{ id: "b", kind: "code", context: "function f(){return 1}", question: "what does f return?", gold: "1" },
|
|
];
|
|
|
|
describe("eval corpus loader", () => {
|
|
it("loads valid cases unchanged", () => {
|
|
const loaded = loadCorpus(cases);
|
|
assert.equal(loaded.length, 2);
|
|
assert.equal(loaded[1].gold, "1");
|
|
});
|
|
|
|
it("rejects a case missing required fields", () => {
|
|
assert.throws(() => loadCorpus([{ id: "x", kind: "prose", context: "", question: "q" } as EvalCase]));
|
|
});
|
|
|
|
it("rejects a captured case with an obvious PII marker (email)", () => {
|
|
assert.throws(() =>
|
|
loadCorpus([{ id: "p", kind: "logs", context: "user alice@example.com failed", question: "who?", captured: true }])
|
|
);
|
|
});
|
|
|
|
it("allows a curated seed case even if it contains an email-like token (curated is vetted)", () => {
|
|
const loaded = loadCorpus([{ id: "s", kind: "logs", context: "noreply@x.test sent", question: "who?", captured: false }]);
|
|
assert.equal(loaded.length, 1);
|
|
});
|
|
|
|
it("hashCorpus is stable and order-independent over case ids", () => {
|
|
const h1 = hashCorpus(cases);
|
|
const h2 = hashCorpus([cases[1], cases[0]]);
|
|
assert.equal(h1, h2);
|
|
assert.match(h1, /^[0-9a-f]{64}$/);
|
|
});
|
|
});
|