mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-06 01:17:46 +08:00
Fix cache token accounting and tiered pricing
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import {
|
||||
cacheMultiplierFromPrice,
|
||||
cachePriceFromInputMultiplier,
|
||||
} from '../tiered-pricing-multipliers'
|
||||
|
||||
describe('cache input multipliers', () => {
|
||||
it('converts an input multiplier to an actual cache price', () => {
|
||||
expect(cachePriceFromInputMultiplier(4, 1.25)).toBe(5)
|
||||
expect(cachePriceFromInputMultiplier(4, 0.1)).toBe(0.4)
|
||||
expect(cachePriceFromInputMultiplier(4, 0)).toBe(0)
|
||||
})
|
||||
|
||||
it('derives a multiplier from an existing cache price', () => {
|
||||
expect(cacheMultiplierFromPrice(4, 5, 1.25)).toBe(1.25)
|
||||
expect(cacheMultiplierFromPrice(4, 0.4, 0.1)).toBe(0.1)
|
||||
})
|
||||
|
||||
it('uses the fallback when a multiplier cannot be derived', () => {
|
||||
expect(cacheMultiplierFromPrice(0, 5, 1.25)).toBe(1.25)
|
||||
expect(cacheMultiplierFromPrice(4, undefined, 0.1)).toBe(0.1)
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,17 @@
|
||||
export function roundTierPrice(value: number): number {
|
||||
return Number.parseFloat(Math.max(0, value).toFixed(6))
|
||||
}
|
||||
|
||||
export function cachePriceFromInputMultiplier(inputPrice: number, multiplier: number): number {
|
||||
const normalizedMultiplier = Number.isFinite(multiplier) && multiplier >= 0 ? multiplier : 0
|
||||
return roundTierPrice(inputPrice * normalizedMultiplier)
|
||||
}
|
||||
|
||||
export function cacheMultiplierFromPrice(
|
||||
inputPrice: number,
|
||||
cachePrice: number | undefined,
|
||||
fallback: number,
|
||||
): number {
|
||||
if (cachePrice == null || inputPrice <= 0) return fallback
|
||||
return roundTierPrice(cachePrice / inputPrice)
|
||||
}
|
||||
Reference in New Issue
Block a user