selected_model_test.go 4.2 KB

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