feat(persona): 人格系统(YAML loader / 角色人格注册+记忆隔离 / 情绪状态机+好感度)
This commit is contained in:
1 parent
653c2489bf
commit
70fd915242
11 files changed
+1568
No files matched your search
@@ -0,0 +1,84 @@
|
||||
package emotion
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestNewAffection_RejectsBadBounds(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
if _, err := NewAffection(50, 100, 0); err == nil {
|
||||
t.Fatal("NewAffection() should error when min > max")
|
||||
}
|
||||
if _, err := NewAffection(200, 0, 100); err == nil {
|
||||
t.Fatal("NewAffection() should error when initial > max")
|
||||
}
|
||||
if _, err := NewAffection(-1, 0, 100); err == nil {
|
||||
t.Fatal("NewAffection() should error when initial < min")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAffection_IncreaseAndDecreaseClamp(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
a, err := NewAffection(50, 0, 100)
|
||||
if err != nil {
|
||||
t.Fatalf("NewAffection() error: %v", err)
|
||||
}
|
||||
|
||||
if got := a.Increase(30); got != 80 {
|
||||
t.Fatalf("Increase(30) = %d, want 80", got)
|
||||
}
|
||||
if got := a.Increase(100); got != 100 {
|
||||
t.Fatalf("Increase(100) clamped = %d, want 100", got)
|
||||
}
|
||||
if got := a.Decrease(40); got != 60 {
|
||||
t.Fatalf("Decrease(40) = %d, want 60", got)
|
||||
}
|
||||
if got := a.Decrease(1000); got != 0 {
|
||||
t.Fatalf("Decrease(1000) clamped = %d, want 0", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAffection_IncreaseIgnoresNonPositiveDelta(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
a, err := NewAffection(50, 0, 100)
|
||||
if err != nil {
|
||||
t.Fatalf("NewAffection() error: %v", err)
|
||||
}
|
||||
if got := a.Increase(0); got != 50 {
|
||||
t.Fatalf("Increase(0) = %d, want 50", got)
|
||||
}
|
||||
if got := a.Decrease(-5); got != 50 {
|
||||
t.Fatalf("Decrease(-5) = %d, want 50", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAffection_AdjustSigned(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
a, err := NewAffection(40, 0, 100)
|
||||
if err != nil {
|
||||
t.Fatalf("NewAffection() error: %v", err)
|
||||
}
|
||||
|
||||
before, after := a.Adjust(30)
|
||||
if before != 40 || after != 70 {
|
||||
t.Fatalf("Adjust(+30) before/after = %d/%d, want 40/70", before, after)
|
||||
}
|
||||
before, after = a.Adjust(-100)
|
||||
if before != 70 || after != 0 {
|
||||
t.Fatalf("Adjust(-100) before/after = %d/%d, want 70/0", before, after)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAffection_BoundsReported(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
a, err := NewAffection(10, 0, 200)
|
||||
if err != nil {
|
||||
t.Fatalf("NewAffection() error: %v", err)
|
||||
}
|
||||
if a.Min() != 0 || a.Max() != 200 {
|
||||
t.Fatalf("Min/Max = %d/%d, want 0/200", a.Min(), a.Max())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user