Files
2026-07-13 13:39:12 +08:00

93 lines
3.1 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
estimateCompressionTokens,
createCompressionStats,
trackCompressionStats,
} from "../../../open-sse/services/compression/stats.ts";
describe("estimateCompressionTokens", () => {
it("returns 0 for null", () => {
assert.equal(estimateCompressionTokens(null), 0);
});
it("returns 0 for undefined", () => {
assert.equal(estimateCompressionTokens(undefined), 0);
});
it("returns 0 for empty string", () => {
assert.equal(estimateCompressionTokens(""), 0);
});
it("estimates tokens from text (chars/4)", () => {
assert.equal(estimateCompressionTokens("hello world"), 3);
});
it("estimates tokens from object", () => {
const tokens = estimateCompressionTokens({ messages: [{ role: "user", content: "test" }] });
assert.ok(tokens > 0);
});
it("handles long strings", () => {
const tokens = estimateCompressionTokens("x".repeat(400));
assert.equal(tokens, 100);
});
});
describe("createCompressionStats", () => {
it("calculates savings correctly", () => {
const original = { messages: [{ role: "user", content: "x".repeat(100) }] };
const compressed = { messages: [{ role: "user", content: "x".repeat(80) }] };
const origTokens = Math.ceil(JSON.stringify(original).length / 4);
const compTokens = Math.ceil(JSON.stringify(compressed).length / 4);
const expectedSavings = Math.round(((origTokens - compTokens) / origTokens) * 10000) / 100;
const stats = createCompressionStats(original, compressed, "lite", ["whitespace"]);
assert.equal(stats.originalTokens, origTokens);
assert.equal(stats.compressedTokens, compTokens);
assert.equal(stats.savingsPercent, expectedSavings);
assert.deepEqual(stats.techniquesUsed, ["whitespace"]);
assert.equal(stats.mode, "lite");
assert.ok(stats.timestamp > 0);
});
it("handles zero original tokens", () => {
const original = {};
const compressed = {};
const stats = createCompressionStats(original, compressed, "off", []);
assert.equal(stats.savingsPercent, 0);
});
it("rounds savings to 2 decimal places", () => {
const original = { messages: [{ role: "user", content: "x".repeat(97) }] };
const compressed = { messages: [{ role: "user", content: "x".repeat(80) }] };
const stats = createCompressionStats(original, compressed, "lite", ["test"]);
assert.ok(Number.isFinite(stats.savingsPercent));
});
});
describe("trackCompressionStats", () => {
it("does not throw for zero tokens", () => {
const stats = {
originalTokens: 0,
compressedTokens: 0,
savingsPercent: 0,
techniquesUsed: [],
mode: "off" as const,
timestamp: Date.now(),
};
assert.doesNotThrow(() => trackCompressionStats(stats));
});
it("logs compression stats", () => {
const stats = {
originalTokens: 100,
compressedTokens: 80,
savingsPercent: 20,
techniquesUsed: ["whitespace"],
mode: "lite" as const,
timestamp: Date.now(),
};
assert.doesNotThrow(() => trackCompressionStats(stats));
});
});