Skip to content
markpaper

src/experimental/ledger.test.ts

v0.1.0 · 1.3 KB

Download file
import { describe, expect, it } from 'vitest';
import { parseDec } from '../numbers/index.js';
import { fixtureFill } from '../testing/fixtures.js';
import { createFillLedger } from './index.js';

describe('opt-in fill ledger evidence', () => {
  it('retains stale intermediate states and reports external transitions uncertain', () => {
    const ledger = createFillLedger({ dedupTtlMs: 300, maxTradeIds: 20, maxHistory: 12, gapSettleMs: 80 });
    const baseline = new Map([['BTC-USD', parseDec('0')!]]);
    expect(ledger.anchor(baseline, ledger.mark())).toBe(true);
    ledger.noteFill(fixtureFill({ qty: '0.18' }));
    ledger.noteFill(fixtureFill({ tradeId: '9007199254741011', qty: '0.2' }));
    expect(ledger.judge(new Map([['BTC-USD', parseDec('0.18')!]]), ledger.mark()).kind).toBe('lagging');
    expect(ledger.judge(new Map([['BTC-USD', parseDec('0.29')!]]), ledger.mark()).kind).toBe('uncertain');
  });
  it('requires independent re-anchoring after a stream gap', () => {
    const ledger = createFillLedger({ dedupTtlMs: 300, maxTradeIds: 20, maxHistory: 12, gapSettleMs: 80 });
    ledger.anchor(new Map([['BTC-USD', parseDec('0')!]]), ledger.mark());
    ledger.noteGap();
    expect(ledger.judge(new Map([['BTC-USD', parseDec('0')!]]), ledger.mark()).kind).toBe('uncertain');
  });
});
All files