60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
package mujica
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
|
|
"github.com/egoist/mygo/ui"
|
|
)
|
|
|
|
func TestCostEstimatorTable(t *testing.T) {
|
|
tt := chatTester(420, 260, func(c *ui.Context) {
|
|
CostEstimator(c, CostEstimatorOptions{InputTokens: 12000, OutputTokens: 3400, InputPrice: 3, OutputPrice: 15})
|
|
})
|
|
for _, s := range []string{"12000", "3400", "15400", "$0.0360", "$0.0510", "$0.0870", "input $3, output $15"} {
|
|
if !tt.HasText(s) {
|
|
t.Errorf("%q missing from %q", s, tt.Texts())
|
|
}
|
|
}
|
|
tt = chatTester(420, 260, func(c *ui.Context) {
|
|
CostEstimator(c, CostEstimatorOptions{InputTokens: 1e6, InputPrice: 2.5, Currency: "¥", Digits: 2})
|
|
})
|
|
if !tt.HasText("¥2.50") {
|
|
t.Fatalf("texts %q", tt.Texts())
|
|
}
|
|
}
|
|
|
|
func TestEstimateCost(t *testing.T) {
|
|
got := EstimateCost(1_000_000, 500_000, 3, 15)
|
|
if got.Input != 3 || got.Output != 7.5 || got.Total != 10.5 {
|
|
t.Fatalf("estimate %+v", got)
|
|
}
|
|
if z := EstimateCost(0, 0, 3, 15); z.Total != 0 {
|
|
t.Fatalf("zero tokens cost %v", z.Total)
|
|
}
|
|
}
|
|
|
|
func TestCostEstimatorRejectsBadInput(t *testing.T) {
|
|
for _, opts := range []CostEstimatorOptions{{InputTokens: -1}, {InputPrice: -1}, {OutputPrice: math.NaN()}, {Digits: -1}} {
|
|
func() {
|
|
defer func() {
|
|
if recover() == nil {
|
|
t.Errorf("%+v: no panic", opts)
|
|
}
|
|
}()
|
|
ui.Render(func(c *ui.Context) {
|
|
Use(c, Settings{})
|
|
CostEstimator(c, opts)
|
|
}, 100, 100, 1)
|
|
}()
|
|
}
|
|
}
|
|
|
|
func TestCostEstimatorSnapshot(t *testing.T) {
|
|
snapshot(t, "cost_estimator", 420, 200, func(c *ui.Context) {
|
|
ui.Column(c).Padding(16).Children(func() {
|
|
CostEstimator(c, CostEstimatorOptions{InputTokens: 12000, OutputTokens: 3400, InputPrice: 3, OutputPrice: 15})
|
|
})
|
|
})
|
|
}
|