Files
Cyrene_v2/internal/persona/emotion/affection_test.go
T

85 lines
2.0 KiB
Go

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())
}
}