Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
68 lines
1.9 KiB
Go
68 lines
1.9 KiB
Go
package ai
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestPersonaSystemPromptNonEmptyDistinct(t *testing.T) {
|
|
modes := []string{PersonaAggressive, PersonaSilent, PersonaPassive, PersonaPersuasive, PersonaBalanced}
|
|
seen := make(map[string]string, len(modes))
|
|
for _, mode := range modes {
|
|
prompt := PersonaSystemPrompt(mode)
|
|
if strings.TrimSpace(prompt) == "" {
|
|
t.Fatalf("persona %q returned empty prompt", mode)
|
|
}
|
|
if !strings.Contains(prompt, "AetherForge fleet controller") {
|
|
t.Fatalf("persona %q missing base system prompt", mode)
|
|
}
|
|
if prev, ok := seen[prompt]; ok {
|
|
t.Fatalf("personas %q and %q produced identical prompts", prev, mode)
|
|
}
|
|
seen[prompt] = mode
|
|
}
|
|
}
|
|
|
|
func TestPersonaSystemPromptModeSpecificGuidance(t *testing.T) {
|
|
cases := []struct {
|
|
mode string
|
|
needle string
|
|
}{
|
|
{PersonaAggressive, "spread_now and discover_and_join"},
|
|
{PersonaSilent, "Never spread_now unless stuck"},
|
|
{PersonaPassive, "Default to noop"},
|
|
{PersonaPersuasive, "discover_and_join before restart_mining"},
|
|
{PersonaBalanced, "Balance spread vs mine"},
|
|
}
|
|
for _, tc := range cases {
|
|
prompt := PersonaSystemPrompt(tc.mode)
|
|
if !strings.Contains(prompt, tc.needle) {
|
|
t.Fatalf("persona %q missing %q in:\n%s", tc.mode, tc.needle, prompt)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNormalizePersona(t *testing.T) {
|
|
if got := NormalizePersona(" AGGRESSIVE "); got != PersonaAggressive {
|
|
t.Fatalf("got %q", got)
|
|
}
|
|
if got := NormalizePersona("unknown"); got != PersonaBalanced {
|
|
t.Fatalf("unknown should map to balanced, got %q", got)
|
|
}
|
|
}
|
|
|
|
func TestCourtJudgeOverlayDistinct(t *testing.T) {
|
|
modes := []string{PersonaAggressive, PersonaSilent, PersonaPassive, PersonaPersuasive, PersonaBalanced}
|
|
prev := ""
|
|
for _, mode := range modes {
|
|
overlay := CourtJudgeOverlay(mode)
|
|
if strings.TrimSpace(overlay) == "" {
|
|
t.Fatalf("empty overlay for %q", mode)
|
|
}
|
|
if overlay == prev && prev != "" {
|
|
t.Fatalf("duplicate court overlay for %q", mode)
|
|
}
|
|
prev = overlay
|
|
}
|
|
}
|