selected_model_test.go

  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}