set_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package collection
  2. import (
  3. "sort"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. func BenchmarkRawSet(b *testing.B) {
  8. m := make(map[interface{}]struct{})
  9. for i := 0; i < b.N; i++ {
  10. m[i] = struct{}{}
  11. _ = m[i]
  12. }
  13. }
  14. func BenchmarkUnmanagedSet(b *testing.B) {
  15. s := NewUnmanagedSet()
  16. for i := 0; i < b.N; i++ {
  17. s.Add(i)
  18. _ = s.Contains(i)
  19. }
  20. }
  21. func BenchmarkSet(b *testing.B) {
  22. s := NewSet()
  23. for i := 0; i < b.N; i++ {
  24. s.AddInt(i)
  25. _ = s.Contains(i)
  26. }
  27. }
  28. func TestAdd(t *testing.T) {
  29. // given
  30. set := NewUnmanagedSet()
  31. values := []interface{}{1, 2, 3}
  32. // when
  33. set.Add(values...)
  34. // then
  35. assert.True(t, set.Contains(1) && set.Contains(2) && set.Contains(3))
  36. assert.Equal(t, len(values), len(set.Keys()))
  37. }
  38. func TestAddInt(t *testing.T) {
  39. // given
  40. set := NewSet()
  41. values := []int{1, 2, 3}
  42. // when
  43. set.AddInt(values...)
  44. // then
  45. assert.True(t, set.Contains(1) && set.Contains(2) && set.Contains(3))
  46. keys := set.KeysInt()
  47. sort.Ints(keys)
  48. assert.EqualValues(t, values, keys)
  49. }
  50. func TestAddInt64(t *testing.T) {
  51. // given
  52. set := NewSet()
  53. values := []int64{1, 2, 3}
  54. // when
  55. set.AddInt64(values...)
  56. // then
  57. assert.True(t, set.Contains(int64(1)) && set.Contains(int64(2)) && set.Contains(int64(3)))
  58. assert.Equal(t, len(values), len(set.KeysInt64()))
  59. }
  60. func TestAddUint(t *testing.T) {
  61. // given
  62. set := NewSet()
  63. values := []uint{1, 2, 3}
  64. // when
  65. set.AddUint(values...)
  66. // then
  67. assert.True(t, set.Contains(uint(1)) && set.Contains(uint(2)) && set.Contains(uint(3)))
  68. assert.Equal(t, len(values), len(set.KeysUint()))
  69. }
  70. func TestAddUint64(t *testing.T) {
  71. // given
  72. set := NewSet()
  73. values := []uint64{1, 2, 3}
  74. // when
  75. set.AddUint64(values...)
  76. // then
  77. assert.True(t, set.Contains(uint64(1)) && set.Contains(uint64(2)) && set.Contains(uint64(3)))
  78. assert.Equal(t, len(values), len(set.KeysUint64()))
  79. }
  80. func TestAddStr(t *testing.T) {
  81. // given
  82. set := NewSet()
  83. values := []string{"1", "2", "3"}
  84. // when
  85. set.AddStr(values...)
  86. // then
  87. assert.True(t, set.Contains("1") && set.Contains("2") && set.Contains("3"))
  88. assert.Equal(t, len(values), len(set.KeysStr()))
  89. }
  90. func TestContainsWithoutElements(t *testing.T) {
  91. // given
  92. set := NewSet()
  93. // then
  94. assert.False(t, set.Contains(1))
  95. }
  96. func TestContainsUnmanagedWithoutElements(t *testing.T) {
  97. // given
  98. set := NewUnmanagedSet()
  99. // then
  100. assert.False(t, set.Contains(1))
  101. }
  102. func TestRemove(t *testing.T) {
  103. // given
  104. set := NewSet()
  105. set.Add([]interface{}{1, 2, 3}...)
  106. // when
  107. set.Remove(2)
  108. // then
  109. assert.True(t, set.Contains(1) && !set.Contains(2) && set.Contains(3))
  110. }
  111. func TestCount(t *testing.T) {
  112. // given
  113. set := NewSet()
  114. set.Add([]interface{}{1, 2, 3}...)
  115. // then
  116. assert.Equal(t, set.Count(), 3)
  117. }