perf: 拆分规划策略

This commit is contained in:
voocel
2026-03-13 00:19:21 +08:00
parent 16e790a372
commit 7488198461
24 changed files with 1543 additions and 487 deletions

View File

@@ -1,7 +1,9 @@
package state
import (
"fmt"
"os"
"sync"
"testing"
"github.com/voocel/ainovel-cli/domain"
@@ -77,6 +79,52 @@ func TestAppendSteerEntry(t *testing.T) {
}
}
func TestAppendSteerEntryConcurrent(t *testing.T) {
dir := t.TempDir()
store := NewStore(dir)
const workers = 32
var wg sync.WaitGroup
start := make(chan struct{})
for i := 0; i < workers; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
<-start
entry := domain.SteerEntry{
Input: fmt.Sprintf("steer-%02d", i),
Timestamp: fmt.Sprintf("ts-%02d", i),
}
if err := store.AppendSteerEntry(entry); err != nil {
t.Errorf("AppendSteerEntry(%d): %v", i, err)
}
}(i)
}
close(start)
wg.Wait()
meta, err := store.LoadRunMeta()
if err != nil {
t.Fatalf("LoadRunMeta: %v", err)
}
if meta == nil {
t.Fatal("expected run meta to exist")
}
if len(meta.SteerHistory) != workers {
t.Fatalf("expected %d steer entries, got %d", workers, len(meta.SteerHistory))
}
seen := make(map[string]struct{}, workers)
for _, entry := range meta.SteerHistory {
seen[entry.Input] = struct{}{}
}
if len(seen) != workers {
t.Fatalf("expected %d unique steer entries, got %d", workers, len(seen))
}
}
func TestAppendSteerEntry_PreservesExistingMeta(t *testing.T) {
dir := t.TempDir()
store := NewStore(dir)
@@ -165,6 +213,26 @@ func TestSetAndClearPendingSteer(t *testing.T) {
}
}
func TestSetPlanningTier(t *testing.T) {
dir := t.TempDir()
store := NewStore(dir)
if err := store.SetPlanningTier(domain.PlanningTierLong); err != nil {
t.Fatalf("SetPlanningTier: %v", err)
}
meta, err := store.LoadRunMeta()
if err != nil {
t.Fatalf("LoadRunMeta: %v", err)
}
if meta == nil {
t.Fatal("expected run meta to exist")
}
if meta.PlanningTier != domain.PlanningTierLong {
t.Fatalf("expected planning tier %q, got %q", domain.PlanningTierLong, meta.PlanningTier)
}
}
func TestClearPendingSteer_Noop(t *testing.T) {
dir := t.TempDir()
store := NewStore(dir)