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