Initial commit with translated description
This commit is contained in:
80
tests/tokens.test.js
Normal file
80
tests/tokens.test.js
Normal file
@@ -0,0 +1,80 @@
|
||||
const { describe, it } = require("node:test");
|
||||
const assert = require("node:assert");
|
||||
const { TOKEN_RATES, emptyUsageBucket, calculateCostForBucket } = require("../src/tokens");
|
||||
|
||||
describe("tokens module", () => {
|
||||
describe("TOKEN_RATES", () => {
|
||||
it("has input rate", () => {
|
||||
assert.strictEqual(TOKEN_RATES.input, 15.0);
|
||||
});
|
||||
|
||||
it("has output rate", () => {
|
||||
assert.strictEqual(TOKEN_RATES.output, 75.0);
|
||||
});
|
||||
|
||||
it("has cache read rate", () => {
|
||||
assert.strictEqual(TOKEN_RATES.cacheRead, 1.5);
|
||||
});
|
||||
|
||||
it("has cache write rate", () => {
|
||||
assert.strictEqual(TOKEN_RATES.cacheWrite, 18.75);
|
||||
});
|
||||
});
|
||||
|
||||
describe("emptyUsageBucket()", () => {
|
||||
it("returns object with zero values", () => {
|
||||
const bucket = emptyUsageBucket();
|
||||
assert.strictEqual(bucket.input, 0);
|
||||
assert.strictEqual(bucket.output, 0);
|
||||
assert.strictEqual(bucket.cacheRead, 0);
|
||||
assert.strictEqual(bucket.cacheWrite, 0);
|
||||
assert.strictEqual(bucket.cost, 0);
|
||||
assert.strictEqual(bucket.requests, 0);
|
||||
});
|
||||
|
||||
it("returns a new object each time", () => {
|
||||
const a = emptyUsageBucket();
|
||||
const b = emptyUsageBucket();
|
||||
assert.notStrictEqual(a, b);
|
||||
a.input = 100;
|
||||
assert.strictEqual(b.input, 0);
|
||||
});
|
||||
});
|
||||
|
||||
describe("calculateCostForBucket()", () => {
|
||||
it("calculates cost for given token counts", () => {
|
||||
const bucket = {
|
||||
input: 1_000_000,
|
||||
output: 1_000_000,
|
||||
cacheRead: 1_000_000,
|
||||
cacheWrite: 1_000_000,
|
||||
};
|
||||
const result = calculateCostForBucket(bucket);
|
||||
assert.strictEqual(result.inputCost, 15.0);
|
||||
assert.strictEqual(result.outputCost, 75.0);
|
||||
assert.strictEqual(result.cacheReadCost, 1.5);
|
||||
assert.strictEqual(result.cacheWriteCost, 18.75);
|
||||
assert.strictEqual(result.totalCost, 15.0 + 75.0 + 1.5 + 18.75);
|
||||
});
|
||||
|
||||
it("returns zero cost for empty bucket", () => {
|
||||
const bucket = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
|
||||
const result = calculateCostForBucket(bucket);
|
||||
assert.strictEqual(result.totalCost, 0);
|
||||
});
|
||||
|
||||
it("accepts custom rates", () => {
|
||||
const bucket = { input: 1_000_000, output: 0, cacheRead: 0, cacheWrite: 0 };
|
||||
const customRates = { input: 10, output: 0, cacheRead: 0, cacheWrite: 0 };
|
||||
const result = calculateCostForBucket(bucket, customRates);
|
||||
assert.strictEqual(result.inputCost, 10.0);
|
||||
assert.strictEqual(result.totalCost, 10.0);
|
||||
});
|
||||
|
||||
it("calculates proportionally for partial token counts", () => {
|
||||
const bucket = { input: 500_000, output: 0, cacheRead: 0, cacheWrite: 0 };
|
||||
const result = calculateCostForBucket(bucket);
|
||||
assert.strictEqual(result.inputCost, 7.5);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user