Spaces:
Running
Running
| import { test } from "node:test"; | |
| import assert from "node:assert/strict"; | |
| import { readFileSync } from "node:fs"; | |
| export function loadCorpus(path) { | |
| return JSON.parse(readFileSync(path, "utf8")); | |
| } | |
| export function defineParityTests({ name = "applier", applier, corpusPath, records, expectedCount }) { | |
| const applyTags = typeof applier === "function" ? applier : applier && applier.applyTags; | |
| if (typeof applyTags !== "function") { | |
| throw new Error("applier must be a function or a module exporting applyTags"); | |
| } | |
| const list = records ?? loadCorpus(corpusPath); | |
| if (expectedCount != null) { | |
| test(`${name}: parity corpus has the full record set`, () => { | |
| assert.equal(list.length, expectedCount); | |
| }); | |
| } | |
| test(`${name}: reconstructs every parity record exactly`, () => { | |
| assert.ok(list.length > 0, "parity corpus is empty"); | |
| for (const [index, record] of list.entries()) { | |
| const { text, spans } = applyTags(record.tokens, record.tags); | |
| assert.equal(text, record.expected_text, `record ${index}: text mismatch`); | |
| if (record.expected_spans) { | |
| assert.deepEqual(spans, record.expected_spans, `record ${index}: span mismatch`); | |
| } | |
| } | |
| }); | |
| } | |