import { describe, expect, it } from "vitest"; import { applyRollModifier, roll2D6, rollD3, rollD66, rollDice } from "./dice"; function createSequenceRoller(values: number[]) { let index = 0; return () => { const next = values[index]; index += 1; return next; }; } describe("dice rules", () => { it("maps d3 rolls from a d6 source", () => { const result = rollD3(createSequenceRoller([5])); expect(result.rolls).toEqual([5]); expect(result.total).toBe(3); expect(result.modifiedTotal).toBe(3); }); it("preserves primary and secondary dice for d66", () => { const result = rollD66(createSequenceRoller([4, 2])); expect(result.primary).toBe(4); expect(result.secondary).toBe(2); expect(result.total).toBe(42); }); it("applies modifiers with clamping when limits are provided", () => { const roll = roll2D6(createSequenceRoller([6, 6])); const modified = applyRollModifier(roll, 3, { min: 2, max: 12 }); expect(modified.modifiedTotal).toBe(12); expect(modified.clamped).toBe(true); }); it("routes dice kinds through the shared roller", () => { const result = rollDice("d6", createSequenceRoller([2])); expect(result.total).toBe(2); expect(result.diceKind).toBe("d6"); }); });