g1t/apps/web/app/lib/token-usage.test.ts

58 lines2,093 bytesCodeBlame
1import assert from "node:assert/strict";
2import { test } from "node:test";
3
4import { bestDay, cacheShare, compactTokens, heatLevel, shortDay, tokenMix, type TokenUsageView } from "./token-usage.ts";
5
6const 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
21test("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
30test("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
35test("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
43test("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
48test("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
55test("days are shown short, in UTC", () => {
56 assert.equal(shortDay("2026-09-22"), "22 Sept");
57 assert.equal(shortDay("nope"), "nope");
58});