import { describe, expect, it } from "vitest"; import { citeKeysInTex, parseBib } from "./bib.js"; import { texContainsNumber } from "./gates.js"; describe("bib + cite parsing", () => { it("parses entries and cite keys", () => { const bib = `@article{smith2020, title={A {Nested} Title}, doi={10.1/abc}, year=2020}\n@book{doe2019,\n title = "B", url = {https://x}\n}`; const e = parseBib(bib); expect(e.map((x) => x.key)).toEqual(["smith2020", "doe2019"]); expect(e[0]?.fields.doi).toBe("10.1/abc"); expect(citeKeysInTex("see \\citep{smith2020, doe2019} and \\textcite[p.~3]{smith2020}").sort()).toEqual([ "doe2019", "smith2020", ]); }); }); describe("reported value tracing", () => { it("matches numbers tolerant of formatting", () => { expect(texContainsNumber("R^2 = 0.4300 and n = 1{,}234", 0.43)).toBe(true); expect(texContainsNumber("n = 1,234 observations", 1234)).toBe(true); expect(texContainsNumber("the coefficient is $-0.12$", "-0.12")).toBe(true); expect(texContainsNumber("value 12.5", 2.5)).toBe(false); expect(texContainsNumber("nothing here", 99)).toBe(false); }); });