52 lines
1.7 KiB
Go
52 lines
1.7 KiB
Go
package growthreport
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestRequestHashIsStableAndScopeSensitive(t *testing.T) {
|
|
t.Parallel()
|
|
a := RequestHash(7, "T-1", false)
|
|
if a != RequestHash(7, "T-1", false) {
|
|
t.Fatal("RequestHash() is not stable")
|
|
}
|
|
if a == RequestHash(7, "T-2", false) || a == RequestHash(7, "T-1", true) {
|
|
t.Fatal("RequestHash() ignored request scope")
|
|
}
|
|
}
|
|
|
|
func TestNextTehranRefreshUsesCalendarBoundary(t *testing.T) {
|
|
t.Parallel()
|
|
now := time.Date(2026, 8, 21, 20, 0, 0, 0, time.UTC)
|
|
next := NextTehranRefresh(now)
|
|
location, _ := time.LoadLocation("Asia/Tehran")
|
|
local := next.In(location)
|
|
if local.Hour() != 0 || local.Minute() != 0 || !next.After(now) {
|
|
t.Fatalf("NextTehranRefresh() = %s", next)
|
|
}
|
|
}
|
|
|
|
func TestEstimatedTokenReservationCoversEveryRetryAndTurn(t *testing.T) {
|
|
t.Parallel()
|
|
small := EstimatedTokenReservation([]byte("{}"))
|
|
large := EstimatedTokenReservation(make([]byte, 1000))
|
|
if small < 4*1600 || large <= small || large != 44000 {
|
|
t.Fatalf("reservations small=%d large=%d", small, large)
|
|
}
|
|
}
|
|
|
|
func TestServiceFingerprintChangesWithDatasetAndConfiguration(t *testing.T) {
|
|
t.Parallel()
|
|
start := time.Date(2026, 8, 21, 0, 0, 0, 0, time.UTC)
|
|
service := &Service{config: ServiceConfig{Model: "model-a", PromptVersion: "prompt-a", SchemaVersion: "schema-a"}}
|
|
current := service.fingerprint(7, "T-1", "watermark-a", start)
|
|
if current == service.fingerprint(7, "T-1", "watermark-b", start) {
|
|
t.Fatal("dataset watermark did not invalidate fingerprint")
|
|
}
|
|
service.config.PromptVersion = "prompt-b"
|
|
if current == service.fingerprint(7, "T-1", "watermark-a", start) {
|
|
t.Fatal("prompt version did not invalidate fingerprint")
|
|
}
|
|
}
|