1package config
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7)
8
9func TestSelectedModelEqual(t *testing.T) {
10 t.Parallel()
11
12 t.Run("equal models", func(t *testing.T) {
13 t.Parallel()
14 a := SelectedModel{Model: "gpt-4o", Provider: "openai"}
15 b := SelectedModel{Model: "gpt-4o", Provider: "openai"}
16 require.True(t, a.Equal(b))
17 })
18
19 t.Run("different model", func(t *testing.T) {
20 t.Parallel()
21 a := SelectedModel{Model: "gpt-4o", Provider: "openai"}
22 b := SelectedModel{Model: "gpt-4o-mini", Provider: "openai"}
23 require.False(t, a.Equal(b))
24 })
25
26 t.Run("different provider", func(t *testing.T) {
27 t.Parallel()
28 a := SelectedModel{Model: "gpt-4o", Provider: "openai"}
29 b := SelectedModel{Model: "gpt-4o", Provider: "anthropic"}
30 require.False(t, a.Equal(b))
31 })
32
33 t.Run("different reasoning effort", func(t *testing.T) {
34 t.Parallel()
35 a := SelectedModel{Model: "o3", Provider: "openai", ReasoningEffort: "high"}
36 b := SelectedModel{Model: "o3", Provider: "openai", ReasoningEffort: "low"}
37 require.False(t, a.Equal(b))
38 })
39
40 t.Run("different think", func(t *testing.T) {
41 t.Parallel()
42 a := SelectedModel{Model: "claude-sonnet", Provider: "anthropic", Think: true}
43 b := SelectedModel{Model: "claude-sonnet", Provider: "anthropic", Think: false}
44 require.False(t, a.Equal(b))
45 })
46
47 t.Run("different max tokens", func(t *testing.T) {
48 t.Parallel()
49 a := SelectedModel{Model: "gpt-4o", Provider: "openai", MaxTokens: 4096}
50 b := SelectedModel{Model: "gpt-4o", Provider: "openai", MaxTokens: 8192}
51 require.False(t, a.Equal(b))
52 })
53
54 t.Run("both nil pointers", func(t *testing.T) {
55 t.Parallel()
56 a := SelectedModel{Model: "gpt-4o", Provider: "openai"}
57 b := SelectedModel{Model: "gpt-4o", Provider: "openai"}
58 require.True(t, a.Equal(b))
59 })
60
61 t.Run("one nil one non-nil pointer", func(t *testing.T) {
62 t.Parallel()
63 temp := 0.7
64 a := SelectedModel{Model: "gpt-4o", Provider: "openai", Temperature: &temp}
65 b := SelectedModel{Model: "gpt-4o", Provider: "openai"}
66 require.False(t, a.Equal(b))
67 require.False(t, b.Equal(a))
68 })
69
70 t.Run("both non-nil equal pointers", func(t *testing.T) {
71 t.Parallel()
72 temp := 0.7
73 a := SelectedModel{Model: "gpt-4o", Provider: "openai", Temperature: &temp}
74 b := SelectedModel{Model: "gpt-4o", Provider: "openai", Temperature: &temp}
75 require.True(t, a.Equal(b))
76 })
77
78 t.Run("both non-nil different pointers", func(t *testing.T) {
79 t.Parallel()
80 t1 := 0.7
81 t2 := 0.9
82 a := SelectedModel{Model: "gpt-4o", Provider: "openai", Temperature: &t1}
83 b := SelectedModel{Model: "gpt-4o", Provider: "openai", Temperature: &t2}
84 require.False(t, a.Equal(b))
85 })
86
87 t.Run("nil ProviderOptions", func(t *testing.T) {
88 t.Parallel()
89 a := SelectedModel{Model: "gpt-4o", Provider: "openai"}
90 b := SelectedModel{Model: "gpt-4o", Provider: "openai"}
91 require.True(t, a.Equal(b))
92 })
93
94 t.Run("empty ProviderOptions", func(t *testing.T) {
95 t.Parallel()
96 a := SelectedModel{Model: "gpt-4o", Provider: "openai", ProviderOptions: map[string]any{}}
97 b := SelectedModel{Model: "gpt-4o", Provider: "openai", ProviderOptions: map[string]any{}}
98 require.True(t, a.Equal(b))
99 })
100
101 t.Run("different ProviderOptions", func(t *testing.T) {
102 t.Parallel()
103 a := SelectedModel{Model: "gpt-4o", Provider: "openai", ProviderOptions: map[string]any{"key": "a"}}
104 b := SelectedModel{Model: "gpt-4o", Provider: "openai", ProviderOptions: map[string]any{"key": "b"}}
105 require.False(t, a.Equal(b))
106 })
107
108 t.Run("one nil one non-nil ProviderOptions", func(t *testing.T) {
109 t.Parallel()
110 a := SelectedModel{Model: "gpt-4o", Provider: "openai", ProviderOptions: map[string]any{"key": "a"}}
111 b := SelectedModel{Model: "gpt-4o", Provider: "openai"}
112 require.False(t, a.Equal(b))
113 })
114}
115
116func TestPtrEqual(t *testing.T) {
117 t.Parallel()
118
119 t.Run("both nil", func(t *testing.T) {
120 t.Parallel()
121 require.True(t, ptrEqual[int](nil, nil))
122 })
123
124 t.Run("one nil", func(t *testing.T) {
125 t.Parallel()
126 v := 42
127 require.False(t, ptrEqual(&v, nil))
128 require.False(t, ptrEqual(nil, &v))
129 })
130
131 t.Run("both equal", func(t *testing.T) {
132 t.Parallel()
133 v := 42
134 require.True(t, ptrEqual(&v, &v))
135 })
136
137 t.Run("both different", func(t *testing.T) {
138 t.Parallel()
139 a := 42
140 b := 43
141 require.False(t, ptrEqual(&a, &b))
142 })
143}