File size: 1,081 Bytes
39371ea | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import test from 'node:test';
import assert from 'node:assert/strict';
import { TokenRateWindow } from '../src/token-rate.mjs';
test('token rate excludes prefill and waits for a measurable decode interval', () => {
const meter = new TokenRateWindow();
assert.equal(meter.rate(5000), null);
meter.add(1, 5000);
assert.equal(meter.rate(5100), null);
meter.add(8, 5250);
assert.equal(meter.rate(5250), 32);
meter.add(8, 5500);
assert.equal(meter.rate(5500), 32);
});
test('rolling rate follows recent throughput, decays during stalls and keeps bounded history', () => {
const meter = new TokenRateWindow();
meter.add(1, 0);
for (let at = 100; at <= 1000; at += 100) meter.add(4, at);
assert.equal(meter.rate(1000), 40);
assert.equal(meter.rate(1500), 20);
assert.equal(meter.rate(2000), 0);
meter.add(5, 2100);
assert.equal(meter.rate(2100), 5);
for (let at = 2200; at <= 100000; at += 100) meter.add(1, at);
assert.equal(meter.rate(100000), 10);
assert(meter.points.length <= 11);
assert.equal(new TokenRateWindow().rate(100000), null);
});
|