import { describe, expect, it } from "vitest"; import { ResultCache } from "../src/inference/cache"; import type { InferenceResult } from "../src/shared/types"; const result = (id: string): InferenceResult => ({ requestId: id, id, textHash: id, label: "toxic", probability: .9, navigationId: "nav" }); describe("ResultCache", () => { it("evicts the oldest entry when the cache reaches its limit", () => { const cache = new ResultCache(2); cache.set("first", result("first")); cache.set("second", result("second")); cache.set("third", result("third")); expect(cache.size).toBe(2); expect(cache.get("first")).toBeUndefined(); expect(cache.get("second")?.id).toBe("second"); expect(cache.get("third")?.id).toBe("third"); }); it("uses normalized text for bounded cache entries", () => { const cache = new ResultCache(1); cache.set(" Same text ", result("same")); expect(cache.get("same text")?.id).toBe("same"); expect(cache.size).toBe(1); }); it("rejects invalid cache sizes", () => { expect(() => new ResultCache(0)).toThrow(); expect(() => new ResultCache(1.5)).toThrow(); }); });