src/experimental/ledger.test.ts
v0.1.0 · 1.3 KB
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');
});
});