import { describe, expect, it } from "vitest"; import { rogueDeadlyPoisonTickDamage, rogueEnvenomPreservationChance, rogueEnvenomPreservesDeadlyPoison, rogueInstantPoisonDamage, roguePoisonApplicationChances, } from "./roguePoison"; describe("Rogue weapon poisons", () => { it("uses the learned poison ranks and attack-power scaling", () => { expect(rogueInstantPoisonDamage(20, 0)).toBe(22); expect(rogueInstantPoisonDamage(80, 1_000)).toBe(450); expect(rogueDeadlyPoisonTickDamage(80, 1_000, 1)).toBe(104); expect(rogueDeadlyPoisonTickDamage(80, 1_000, 5)).toBe(520); }); it("applies Envenom's poison-frequency bonuses without exceeding the stack cap", () => { expect(roguePoisonApplicationChances(false)).toEqual({ instant: 0.2, deadly: 0.3 }); expect(roguePoisonApplicationChances(true).instant).toBeCloseTo(0.35); expect(roguePoisonApplicationChances(true).deadly).toBeCloseTo(0.45); expect(rogueDeadlyPoisonTickDamage(80, 1_000, 99)).toBe(520); }); it("honors Master Poisoner's Envenom dose-preservation ranks", () => { expect(rogueEnvenomPreservationChance({})).toBe(0); expect(rogueEnvenomPreservationChance({ "talent-1715": 1 })).toBe(0.33); expect(rogueEnvenomPreservationChance({ "talent-1715": 2 })).toBe(0.66); expect(rogueEnvenomPreservationChance({ "talent-1715": 3 })).toBe(1); expect(rogueEnvenomPreservesDeadlyPoison({ "talent-1715": 3 }, "any-cast")).toBe(true); expect(rogueEnvenomPreservesDeadlyPoison({}, "any-cast")).toBe(false); }); });