format.test.ts
Language TypeScript2.3 KB62 lines
import { describe, expect, it } from 'vitest'import { costNano, estimateTokens } from '../ipc/mock/mockClient'import { perMillion, relativeDay, shortModel, snippetParts, tokens, usd } from './format'describe('money and tokens', () => {it('formats nano-dollars like cortex-core does', () => {expect(usd(0)).toBe('$0')expect(usd(12)).toBe('<$0.0001')expect(usd(3_500_000)).toBe('$0.0035')expect(usd(1_240_000_000)).toBe('$1.24')})it('prices per million', () => {expect(perMillion(0)).toBe('free')expect(perMillion(0.5)).toBe('$0.50')expect(perMillion(0.075)).toBe('$0.075')expect(perMillion(15)).toBe('$15.00')})it('token counts', () => {expect(tokens(412)).toBe('412')expect(tokens(1234)).toBe('1.2k')expect(tokens(262144)).toBe('262k')expect(tokens(1_048_576)).toBe('1.0M')})it('the mock bills exactly as cost.rs', () => {// Same cases as cost.rs's tests.const p = { input_per_m: 0.5, output_per_m: 1.5, cache_read_per_m: 0.1 }expect(costNano({ prompt_tokens: 1000, completion_tokens: 2000, cached_tokens: 0 }, p)).toBe(3_500_000)expect(costNano({ prompt_tokens: 1000, completion_tokens: 0, cached_tokens: 400 }, p)).toBe(340_000)expect(costNano({ prompt_tokens: 10, completion_tokens: -5, cached_tokens: 99 }, p)).toBe(1_000)expect(estimateTokens('abcde')).toBe(2)expect(estimateTokens('你好')).toBe(2)})})describe('text helpers', () => {it('short model names', () => {expect(shortModel('Qwen/Qwen3-235B-A22B-Instruct-2507')).toBe('Qwen3-235B-A22B-Instruct-2507')expect(shortModel('llama3.2')).toBe('llama3.2')})it('search snippet marks', () => {expect(snippetParts('use \u0001rsync\u0002 with \u0001delete\u0002.')).toEqual([{ text: 'use ', hit: false },{ text: 'rsync', hit: true },{ text: ' with ', hit: false },{ text: 'delete', hit: true },{ text: '.', hit: false },])})it('relative days', () => {const now = new Date(2026, 8, 28, 15).getTime()expect(relativeDay(new Date(2026, 8, 28, 1).getTime(), now)).toBe('Today')expect(relativeDay(new Date(2026, 8, 27, 23).getTime(), now)).toBe('Yesterday')expect(relativeDay(new Date(2026, 8, 24).getTime(), now)).toBe('This week')expect(relativeDay(new Date(2026, 5, 1).getTime(), now)).toBe('Earlier')})})