import { describe, expect, it } from "vitest";
import { overnightRate360, settlementFraction, trfAccrual, utc } from "..";
describe("TRF accrual since launch", () => {
const launch = utc(2026, 7, 11);
const dividends = [
{ date: utc(2026, 8, 18), gross: 0.33 },
{ date: utc(2026, 11, 18), gross: 30.25 },
];
const base = { launch, spot: 6551.22, rate: 0.02, dividends };
it("is zero at launch", () => {
expect(trfAccrual({ ...base, valuation: launch }).accrual).toBe(0);
});
it("adds gross dividends gone ex since launch and subtracts flat-rate funding on today's spot", () => {
const valuation = utc(2026, 9, 1); // after the Sep 18 dividend, before Dec
const r = trfAccrual({ ...base, valuation });
expect(r.distributions).toBe(0.33);
expect(r.funding).toBeCloseTo(6551.22 * overnightRate360(0.02) * settlementFraction(launch, valuation), 10);
expect(r.accrual).toBeCloseTo(r.distributions - r.funding, 12);
});
});