import { describe, expect, it } from "vitest"; import { lazy } from "../lazy"; describe("lazy", () => { it("shares one evaluation among concurrent callers", async () => { let calls = 0; let resolveLoad: (value: { ok: boolean }) => void = () => {}; const load = lazy(() => { calls++; return new Promise<{ ok: boolean }>((resolve) => { resolveLoad = resolve; }); }); const first = load(); const second = load(); resolveLoad({ ok: true }); await expect(first).resolves.toEqual({ ok: true }); await expect(second).resolves.toEqual({ ok: true }); expect(calls).toBe(1); }); it("re-evaluates after a failed load", async () => { let calls = 0; const load = lazy(async () => { calls++; if (calls === 1) throw new Error("boom"); return calls; }); await expect(load()).rejects.toThrow("boom"); await expect(load()).resolves.toBe(2); }); });