返回 DeepSeek-Reasonix
quality_floor_test.go
根目录 / internal / control / quality_floor_test.go
1 package control
2
3 import (
4 "sync"
5 "testing"
6
7 "reasonix/internal/taskcontract"
8 )
9
10 func TestSetQualityFloorNormalizesVocabulary(t *testing.T) {
11 c := newOwnedTestController(t, Options{Label: "floor"})
12 cases := map[string]string{
13 "": QualityFloorStandard,
14 "standard": QualityFloorStandard,
15 "balanced": QualityFloorStandard,
16 "full": QualityFloorStandard,
17 "light": QualityFloorStandard,
18 "economy": QualityFloorStandard,
19 "eco": QualityFloorStandard,
20 "lite": QualityFloorStandard,
21 "minimal": QualityFloorStandard,
22 "delivery": QualityFloorStandard,
23 "deliver": QualityFloorStandard,
24 "quality": QualityFloorStandard,
25 " DELIVERY ": QualityFloorStandard,
26 }
27 for raw, want := range cases {
28 if err := c.SetQualityFloor(raw); err != nil {
29 t.Fatalf("SetQualityFloor(%q): %v", raw, err)
30 }
31 if got := c.QualityFloor(); got != want {
32 t.Fatalf("SetQualityFloor(%q) = %q, want %q", raw, got, want)
33 }
34 }
35 if err := c.SetQualityFloor(QualityFloorDelivery); err != nil {
36 t.Fatalf("SetQualityFloor(delivery): %v", err)
37 }
38 if err := c.SetQualityFloor("turbo"); err == nil {
39 t.Fatal("unknown floor value must error")
40 }
41 if got := c.QualityFloor(); got != QualityFloorStandard {
42 t.Fatalf("rejected value must not change state, got %q", got)
43 }
44 }
45
46 func TestRetiredQualityFloorNeverReachesTurnConstraints(t *testing.T) {
47 c := newOwnedTestController(t, Options{Label: "floor"})
48 if got := c.qualityFloorConstraint(); got != taskcontract.PolicyFloorNone {
49 t.Fatalf("default floor constraint = %v, want none", got)
50 }
51 if err := c.SetQualityFloor(QualityFloorDelivery); err != nil {
52 t.Fatalf("SetQualityFloor: %v", err)
53 }
54 if got := c.qualityFloorConstraint(); got != taskcontract.PolicyFloorNone {
55 t.Fatalf("floor constraint = %v, want none", got)
56 }
57 }
58
59 func TestSetQualityFloorConcurrentWithReads(t *testing.T) {
60 c := newOwnedTestController(t, Options{Label: "floor"})
61 var wg sync.WaitGroup
62 for i := range 8 {
63 wg.Add(2)
64 go func(i int) {
65 defer wg.Done()
66 floor := QualityFloorStandard
67 if i%2 == 0 {
68 floor = QualityFloorDelivery
69 }
70 _ = c.SetQualityFloor(floor)
71 }(i)
72 go func() {
73 defer wg.Done()
74 if got := c.QualityFloor(); got != QualityFloorStandard {
75 t.Errorf("QualityFloor returned %q, want standard", got)
76 }
77 _ = c.qualityFloorConstraint()
78 }()
79 }
80 wg.Wait()
81 }
82
82 lines GO