sortedmap_test.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. package sortedmap
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. )
  6. func Test_SortedMap(t *testing.T) {
  7. sm := New()
  8. t.Run("SetExpression", func(t *testing.T) {
  9. _, _, err := sm.SetExpression("")
  10. assert.ErrorIs(t, err, ErrInvalidKVExpression)
  11. _, _, err = sm.SetExpression("foo")
  12. assert.ErrorIs(t, err, ErrInvalidKVExpression)
  13. _, _, err = sm.SetExpression("foo= ")
  14. assert.ErrorIs(t, err, ErrInvalidKVExpression)
  15. _, _, err = sm.SetExpression(" foo=")
  16. assert.ErrorIs(t, err, ErrInvalidKVExpression)
  17. _, _, err = sm.SetExpression("foo =")
  18. assert.ErrorIs(t, err, ErrInvalidKVExpression)
  19. _, _, err = sm.SetExpression("=")
  20. assert.ErrorIs(t, err, ErrInvalidKVExpression)
  21. _, _, err = sm.SetExpression("=bar")
  22. assert.ErrorIs(t, err, ErrInvalidKVExpression)
  23. key, value, err := sm.SetExpression("foo=bar")
  24. assert.Nil(t, err)
  25. assert.Equal(t, "foo", key)
  26. assert.Equal(t, "bar", value)
  27. key, value, err = sm.SetExpression("foo=")
  28. assert.Nil(t, err)
  29. assert.Equal(t, value, sm.GetOr(key, ""))
  30. sm.Reset()
  31. })
  32. t.Run("SetKV", func(t *testing.T) {
  33. sm.SetKV("foo", "bar")
  34. assert.Equal(t, "bar", sm.GetOr("foo", ""))
  35. sm.SetKV("foo", "bar-changed")
  36. assert.Equal(t, "bar-changed", sm.GetOr("foo", ""))
  37. sm.Reset()
  38. })
  39. t.Run("Set", func(t *testing.T) {
  40. err := sm.Set(KV{})
  41. assert.Nil(t, err)
  42. err = sm.Set(KV{"foo"})
  43. assert.ErrorIs(t, ErrInvalidKVS, err)
  44. err = sm.Set(KV{"foo", "bar", "bar", "foo"})
  45. assert.Nil(t, err)
  46. assert.Equal(t, "bar", sm.GetOr("foo", ""))
  47. assert.Equal(t, "foo", sm.GetOr("bar", ""))
  48. sm.Reset()
  49. })
  50. t.Run("Get", func(t *testing.T) {
  51. _, ok := sm.Get("foo")
  52. assert.False(t, ok)
  53. sm.SetKV("foo", "bar")
  54. value, ok := sm.Get("foo")
  55. assert.True(t, ok)
  56. assert.Equal(t, "bar", value)
  57. sm.Reset()
  58. })
  59. t.Run("GetString", func(t *testing.T) {
  60. _, ok := sm.GetString("foo")
  61. assert.False(t, ok)
  62. sm.SetKV("foo", "bar")
  63. value, ok := sm.GetString("foo")
  64. assert.True(t, ok)
  65. assert.Equal(t, "bar", value)
  66. sm.Reset()
  67. })
  68. t.Run("GetStringOr", func(t *testing.T) {
  69. value := sm.GetStringOr("foo", "bar")
  70. assert.Equal(t, "bar", value)
  71. sm.SetKV("foo", "foo")
  72. value = sm.GetStringOr("foo", "bar")
  73. assert.Equal(t, "foo", value)
  74. sm.Reset()
  75. })
  76. t.Run("GetOr", func(t *testing.T) {
  77. value := sm.GetOr("foo", "bar")
  78. assert.Equal(t, "bar", value)
  79. sm.SetKV("foo", "foo")
  80. value = sm.GetOr("foo", "bar")
  81. assert.Equal(t, "foo", value)
  82. sm.Reset()
  83. })
  84. t.Run("HasKey", func(t *testing.T) {
  85. ok := sm.HasKey("foo")
  86. assert.False(t, ok)
  87. sm.SetKV("foo", "")
  88. assert.True(t, sm.HasKey("foo"))
  89. sm.Reset()
  90. })
  91. t.Run("HasValue", func(t *testing.T) {
  92. assert.False(t, sm.HasValue("bar"))
  93. sm.SetKV("foo", "bar")
  94. assert.True(t, sm.HasValue("bar"))
  95. sm.Reset()
  96. })
  97. t.Run("Keys", func(t *testing.T) {
  98. keys := sm.Keys()
  99. assert.Equal(t, 0, len(keys))
  100. expected := []string{"foo1", "foo2", "foo3"}
  101. for _, key := range expected {
  102. sm.SetKV(key, "")
  103. }
  104. keys = sm.Keys()
  105. var actual []string
  106. for _, key := range keys {
  107. actual = append(actual, key.(string))
  108. }
  109. assert.Equal(t, expected, actual)
  110. sm.Reset()
  111. })
  112. t.Run("Values", func(t *testing.T) {
  113. values := sm.Values()
  114. assert.Equal(t, 0, len(values))
  115. expected := []string{"foo1", "foo2", "foo3"}
  116. for _, key := range expected {
  117. sm.SetKV(key, key)
  118. }
  119. values = sm.Values()
  120. var actual []string
  121. for _, value := range values {
  122. actual = append(actual, value.(string))
  123. }
  124. assert.Equal(t, expected, actual)
  125. sm.Reset()
  126. })
  127. t.Run("Range", func(t *testing.T) {
  128. var keys, values []string
  129. sm.Range(func(key, value any) {
  130. keys = append(keys, key.(string))
  131. values = append(values, value.(string))
  132. })
  133. assert.Len(t, keys, 0)
  134. assert.Len(t, values, 0)
  135. expected := []string{"foo1", "foo2", "foo3"}
  136. for _, key := range expected {
  137. sm.SetKV(key, key)
  138. }
  139. sm.Range(func(key, value any) {
  140. keys = append(keys, key.(string))
  141. values = append(values, value.(string))
  142. })
  143. assert.Equal(t, expected, keys)
  144. assert.Equal(t, expected, values)
  145. sm.Reset()
  146. })
  147. t.Run("RangeIf", func(t *testing.T) {
  148. var keys, values []string
  149. sm.RangeIf(func(key, value any) bool {
  150. keys = append(keys, key.(string))
  151. values = append(values, value.(string))
  152. return true
  153. })
  154. assert.Len(t, keys, 0)
  155. assert.Len(t, values, 0)
  156. expected := []string{"foo1", "foo2", "foo3"}
  157. for _, key := range expected {
  158. sm.SetKV(key, key)
  159. }
  160. sm.RangeIf(func(key, value any) bool {
  161. keys = append(keys, key.(string))
  162. values = append(values, value.(string))
  163. if key.(string) == "foo1" {
  164. return false
  165. }
  166. return true
  167. })
  168. assert.Equal(t, []string{"foo1"}, keys)
  169. assert.Equal(t, []string{"foo1"}, values)
  170. sm.Reset()
  171. })
  172. t.Run("Remove", func(t *testing.T) {
  173. _, ok := sm.Remove("foo")
  174. assert.False(t, ok)
  175. sm.SetKV("foo", "bar")
  176. value, ok := sm.Remove("foo")
  177. assert.True(t, ok)
  178. assert.Equal(t, "bar", value)
  179. assert.False(t, sm.HasKey("foo"))
  180. assert.False(t, sm.HasValue("bar"))
  181. sm.Reset()
  182. })
  183. t.Run("Insert", func(t *testing.T) {
  184. data := New()
  185. data.SetKV("foo", "bar")
  186. sm.SetKV("foo1", "bar1")
  187. sm.Insert(data)
  188. assert.True(t, sm.HasKey("foo"))
  189. assert.True(t, sm.HasValue("bar"))
  190. sm.Reset()
  191. })
  192. t.Run("Copy", func(t *testing.T) {
  193. sm.SetKV("foo", "bar")
  194. data := sm.Copy()
  195. assert.True(t, data.HasKey("foo"))
  196. assert.True(t, data.HasValue("bar"))
  197. sm.SetKV("foo", "bar1")
  198. assert.True(t, data.HasKey("foo"))
  199. assert.True(t, data.HasValue("bar"))
  200. sm.Reset()
  201. })
  202. t.Run("Format", func(t *testing.T) {
  203. format := sm.Format()
  204. assert.Equal(t, []string{}, format)
  205. sm.SetKV("foo1", "bar1")
  206. sm.SetKV("foo2", "bar2")
  207. sm.SetKV("foo3", "")
  208. format = sm.Format()
  209. assert.Equal(t, []string{"foo1=bar1", "foo2=bar2", "foo3="}, format)
  210. sm.Reset()
  211. })
  212. }