import { describe, expect, it } from "vitest" ;
import {
formatDurationCompact,
formatTokenShort,
formatTokenUsageDisplay,
resolveIoTokens,
resolveTotalTokens,
truncateLine,
} from "./subagents-format.js" ;
describe("shared/subagents-format" , () => {
it("re-exports the canonical formatter with second-level precision" , () => {
expect(formatDurationCompact()).toBeUndefined();
expect(formatDurationCompact(30 _000 )).toBe("30s" );
expect(formatDurationCompact(90 _000 )).toBe("1m30s" );
expect(formatDurationCompact(60 * 60 _000 )).toBe("1h" );
expect(formatDurationCompact(61 * 60 _000 )).toBe("1h1m" );
expect(formatDurationCompact(24 * 60 * 60 _000 )).toBe("1d" );
expect(formatDurationCompact(25 * 60 * 60 _000 )).toBe("1d1h" );
});
it("formats token counts with integer, kilo, and million branches" , () => {
expect(formatTokenShort()).toBeUndefined();
expect(formatTokenShort(999 .9 )).toBe("999" );
expect(formatTokenShort(1 _500 )).toBe("1.5k" );
expect(formatTokenShort(10 _000 )).toBe("10k" );
expect(formatTokenShort(15 _400 )).toBe("15k" );
expect(formatTokenShort(1 _000 _000 )).toBe("1m" );
expect(formatTokenShort(1 _250 _000 )).toBe("1.3m" );
});
it("truncates lines only when needed" , () => {
expect(truncateLine("short" , 10 )).toBe("short" );
expect(truncateLine("trim me " , 7 )).toBe("trim me..." );
});
it("resolves token totals and io breakdowns from valid numeric fields only" , () => {
expect(resolveTotalTokens()).toBeUndefined();
expect(resolveTotalTokens({ totalTokens: 42 })).toBe(42 );
expect(resolveTotalTokens({ inputTokens: 10 , outputTokens: 5 })).toBe(15 );
expect(resolveTotalTokens({ inputTokens: Number.NaN, outputTokens: 5 })).toBeUndefined();
expect(resolveIoTokens({ inputTokens: 10 , outputTokens: 5 })).toEqual({
input: 10 ,
output: 5 ,
total: 15 ,
});
expect(resolveIoTokens({ outputTokens: 5 })).toEqual({
input: 0 ,
output: 5 ,
total: 5 ,
});
expect(resolveIoTokens({ inputTokens: Number.NaN, outputTokens: 0 })).toBeUndefined();
});
it("formats io and prompt-cache usage displays with fallback branches" , () => {
expect(
formatTokenUsageDisplay({
inputTokens: 1 _200 ,
outputTokens: 300 ,
totalTokens: 2 _100 ,
}),
).toBe("tokens 1.5k (in 1.2k / out 300), prompt/cache 2.1k" );
expect(formatTokenUsageDisplay({ totalTokens: 500 })).toBe("tokens 500 prompt/cache" );
expect(
formatTokenUsageDisplay({
inputTokens: 1 _200 ,
outputTokens: 300 ,
totalTokens: 1 _500 ,
}),
).toBe("tokens 1.5k (in 1.2k / out 300)" );
expect(formatTokenUsageDisplay({ inputTokens: 0 , outputTokens: 0 , totalTokens: 0 })).toBe("" );
});
});
Messung V0.5 in Prozent C=100 H=98 G=98
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland