import { describe, expect, it } from 'vitest';
import { FLOW, REPLAY_TAIL_BYTES } from '../src/index.js';

describe('invariants du flow control', () => {
  // Le client n'ACK qu'à réception de données : si le serveur pouvait se mettre
  // en pause avec un reliquat non-ACKé > LOW mais < pas d'ACK, plus rien ne
  // progresserait (deadlock observé en acceptation P1 avec ACK_EVERY = 256 Kio).
  it('ACK_EVERY_BYTES <= LOW_WATERMARK (anti-deadlock)', () => {
    expect(FLOW.ACK_EVERY_BYTES).toBeLessThanOrEqual(FLOW.LOW_WATERMARK);
  });

  it('LOW < HIGH < LAGGING, tous strictement positifs', () => {
    expect(FLOW.LOW_WATERMARK).toBeGreaterThan(0);
    expect(FLOW.HIGH_WATERMARK).toBeGreaterThan(FLOW.LOW_WATERMARK);
    expect(FLOW.LAGGING_BYTES).toBeGreaterThan(FLOW.HIGH_WATERMARK);
  });

  it('le replay tient dans la fenêtre lagging (resync ne re-déclenche pas lagging)', () => {
    expect(REPLAY_TAIL_BYTES).toBeLessThan(FLOW.LAGGING_BYTES);
  });
});
