| 1 | import assert from "node:assert/strict"; |
| 2 | import { test } from "node:test"; |
| 3 | |
| 4 | import { bestDay, cacheShare, compactTokens, heatLevel, shortDay, tokenMix, type TokenUsageView } from "./token-usage.ts"; |
| 5 | |
| 6 | const usage = (over: Partial<TokenUsageView> = {}): TokenUsageView => ({ |
| 7 | since: "2026-08-26", |
| 8 | days: 42, |
| 9 | person: null, |
| 10 | totalTokens: 0, |
| 11 | inputTokens: 0, |
| 12 | outputTokens: 0, |
| 13 | cacheReadTokens: 0, |
| 14 | cacheWriteTokens: 0, |
| 15 | costMicros: 0, |
| 16 | activeDays: 0, |
| 17 | byDay: [], |
| 18 | ...over, |
| 19 | }); |
| 20 | |
| 21 | test("token counts read short", () => { |
| 22 | assert.equal(compactTokens(8_500_000_000), "8.5B"); |
| 23 | assert.equal(compactTokens(412_300_000), "412M"); |
| 24 | assert.equal(compactTokens(12_340), "12.3K"); |
| 25 | assert.equal(compactTokens(2_000_000), "2M"); |
| 26 | assert.equal(compactTokens(940), "940"); |
| 27 | assert.equal(compactTokens(0), "0"); |
| 28 | }); |
| 29 | |
| 30 | test("cache share is reads over every prompt token", () => { |
| 31 | assert.equal(cacheShare(usage({ inputTokens: 10, cacheReadTokens: 80, cacheWriteTokens: 10 })), 0.8); |
| 32 | assert.equal(cacheShare(usage()), null); |
| 33 | }); |
| 34 | |
| 35 | test("the grid shades by quartile of the busiest day", () => { |
| 36 | assert.equal(heatLevel(0, 100), 0); |
| 37 | assert.equal(heatLevel(1, 100), 1); |
| 38 | assert.equal(heatLevel(26, 100), 2); |
| 39 | assert.equal(heatLevel(100, 100), 4); |
| 40 | assert.equal(heatLevel(5, 0), 0); |
| 41 | }); |
| 42 | |
| 43 | test("the best day, and none on an empty window", () => { |
| 44 | assert.deepEqual(bestDay([{ day: "a", tokens: 3 }, { day: "b", tokens: 9 }, { day: "c", tokens: 9 }]), { day: "b", tokens: 9 }); |
| 45 | assert.equal(bestDay([{ day: "a", tokens: 0 }]), null); |
| 46 | }); |
| 47 | |
| 48 | test("the mix is in its checked order and adds up to one", () => { |
| 49 | const mix = tokenMix(usage({ inputTokens: 1, cacheReadTokens: 6, cacheWriteTokens: 1, outputTokens: 2 })); |
| 50 | assert.deepEqual(mix.map((part) => part.key), ["input", "cacheRead", "cacheWrite", "output"]); |
| 51 | assert.equal(mix.reduce((sum, part) => sum + part.share, 0), 1); |
| 52 | assert.ok(tokenMix(usage()).every((part) => part.share === 0)); |
| 53 | }); |
| 54 | |
| 55 | test("days are shown short, in UTC", () => { |
| 56 | assert.equal(shortDay("2026-09-22"), "22 Sept"); |
| 57 | assert.equal(shortDay("nope"), "nope"); |
| 58 | }); |