import { describe, expect, it } from "vitest"; import { sumMoney } from "./decimal"; describe("sumMoney", () => { it("adds exact signed decimals independently per currency", () => { expect(sumMoney([ { currency: "RUB", value: "0.1" }, { currency: "USD", value: "0.01" }, { currency: "RUB", value: "0.2" }, { currency: "RUB", value: "-1500000.45" }, { currency: "USD", value: "-0.02" }, { currency: "RUB", value: "200" }, ])).toEqual([ { currency: "RUB", value: "-1499800.15" }, { currency: "USD", value: "-0.01" }, ]); }); it("preserves significant fractional digits and a compensated zero", () => { expect(sumMoney([ { currency: "RUB", value: "100.5" }, { currency: "RUB", value: "49.50" }, { currency: "RUB", value: "0.005" }, ])).toEqual([{ currency: "RUB", value: "150.005" }]); expect(sumMoney([ { currency: "RUB", value: "100" }, { currency: "RUB", value: "-100" }, ])).toEqual([{ currency: "RUB", value: "0" }]); }); it.each(["", ".", "1.2.3", "not-a-number"])( "rejects malformed amount %s instead of treating it as zero", (value) => { expect(sumMoney([ { currency: "RUB", value: "100" }, { currency: "RUB", value }, ])).toBeNull(); }, ); });