import { describe, expect, it } from "vitest"; import { computeVisibleRange, totalContentHeight } from "./virtualization"; describe("computeVisibleRange (Akzeptanzkriterium 2 + Pflichtprüfung 1: 10.000 Zeilen ruckelfrei)", () => { it("rendert bei 10.000 Zeilen nur einen kleinen sichtbaren Ausschnitt, nicht alle", () => { const range = computeVisibleRange(0, 600, 32, 10000, 5); const rendered = range.endIndex - range.startIndex; expect(rendered).toBeLessThan(50); expect(rendered).toBeGreaterThan(0); }); it("verschiebt den sichtbaren Bereich beim Scrollen", () => { const top = computeVisibleRange(0, 600, 32, 10000, 0); const scrolled = computeVisibleRange(3200, 600, 32, 10000, 0); expect(scrolled.startIndex).toBeGreaterThan(top.startIndex); }); it("bleibt am Ende der Liste innerhalb der Grenzen", () => { const range = computeVisibleRange(1_000_000, 600, 32, 100, 5); expect(range.endIndex).toBeLessThanOrEqual(100); expect(range.startIndex).toBeLessThanOrEqual(100); expect(range.startIndex).toBeLessThanOrEqual(range.endIndex); }); it("liefert eine leere Range bei 0 Zeilen, kein Fehler", () => { const range = computeVisibleRange(0, 600, 32, 0); expect(range.startIndex).toBe(0); expect(range.endIndex).toBe(0); }); it("totalContentHeight ergibt Zeilenzahl mal Zeilenhoehe (fuer den Scroll-Spacer)", () => { expect(totalContentHeight(10000, 32)).toBe(320000); }); });