src/lib/pricing/__tests__/accrual.test.ts

24 lines
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);
  });
});