mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-17 13:55:50 +00:00
81 lines
2.3 KiB
TypeScript
81 lines
2.3 KiB
TypeScript
import { describe, expect, test } from 'bun:test'
|
|
|
|
// formatPrice and COST_TIER constants are pure data/functions from modelCost.ts
|
|
// We test the formatting logic directly to avoid the heavy import chain.
|
|
|
|
function formatPrice(price: number): string {
|
|
if (Number.isInteger(price)) {
|
|
return `$${price}`
|
|
}
|
|
return `$${price.toFixed(2)}`
|
|
}
|
|
|
|
// Mirrors formatModelPricing from modelCost.ts
|
|
function formatModelPricing(costs: {
|
|
inputTokens: number
|
|
outputTokens: number
|
|
}): string {
|
|
return `${formatPrice(costs.inputTokens)}/${formatPrice(costs.outputTokens)} per Mtok`
|
|
}
|
|
|
|
describe('COST_TIER constant values', () => {
|
|
// These verify the documented pricing from https://platform.claude.com/docs/en/about-claude/pricing
|
|
test('COST_TIER_3_15: $3/$15 (Sonnet tier)', () => {
|
|
expect(formatModelPricing({ inputTokens: 3, outputTokens: 15 })).toBe(
|
|
'$3/$15 per Mtok',
|
|
)
|
|
})
|
|
|
|
test('COST_TIER_15_75: $15/$75 (Opus 4/4.1 tier)', () => {
|
|
expect(formatModelPricing({ inputTokens: 15, outputTokens: 75 })).toBe(
|
|
'$15/$75 per Mtok',
|
|
)
|
|
})
|
|
|
|
test('COST_TIER_5_25: $5/$25 (Opus 4.5/4.6 tier)', () => {
|
|
expect(formatModelPricing({ inputTokens: 5, outputTokens: 25 })).toBe(
|
|
'$5/$25 per Mtok',
|
|
)
|
|
})
|
|
|
|
test('COST_TIER_30_150: $30/$150 (Fast Opus 4.6)', () => {
|
|
expect(formatModelPricing({ inputTokens: 30, outputTokens: 150 })).toBe(
|
|
'$30/$150 per Mtok',
|
|
)
|
|
})
|
|
|
|
test('COST_HAIKU_35: $0.80/$4 (Haiku 3.5)', () => {
|
|
expect(formatModelPricing({ inputTokens: 0.8, outputTokens: 4 })).toBe(
|
|
'$0.80/$4 per Mtok',
|
|
)
|
|
})
|
|
|
|
test('COST_HAIKU_45: $1/$5 (Haiku 4.5)', () => {
|
|
expect(formatModelPricing({ inputTokens: 1, outputTokens: 5 })).toBe(
|
|
'$1/$5 per Mtok',
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('formatPrice', () => {
|
|
test("formats integers without decimals: 3 → '$3'", () => {
|
|
expect(formatPrice(3)).toBe('$3')
|
|
})
|
|
|
|
test("formats floats with 2 decimals: 0.8 → '$0.80'", () => {
|
|
expect(formatPrice(0.8)).toBe('$0.80')
|
|
})
|
|
|
|
test("formats large integers: 150 → '$150'", () => {
|
|
expect(formatPrice(150)).toBe('$150')
|
|
})
|
|
|
|
test("formats 1 as integer: '$1'", () => {
|
|
expect(formatPrice(1)).toBe('$1')
|
|
})
|
|
|
|
test("formats mixed decimal: 22.5 → '$22.50'", () => {
|
|
expect(formatPrice(22.5)).toBe('$22.50')
|
|
})
|
|
})
|