map_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package fn
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/require"
  5. )
  6. func TestKeySet(t *testing.T) {
  7. testMap := map[string]int{"a": 1, "b": 2, "c": 3}
  8. expected := NewSet([]string{"a", "b", "c"}...)
  9. require.Equal(t, expected, KeySet(testMap))
  10. }
  11. // TestNewSubMap tests the NewSubMap function with various input cases.
  12. func TestNewSubMap(t *testing.T) {
  13. tests := []struct {
  14. name string
  15. original map[int]string
  16. keys []int
  17. expected map[int]string
  18. wantErr bool
  19. }{
  20. {
  21. name: "Successful submap creation",
  22. original: map[int]string{
  23. 1: "apple",
  24. 2: "banana",
  25. 3: "cherry",
  26. },
  27. keys: []int{1, 3},
  28. expected: map[int]string{
  29. 1: "apple",
  30. 3: "cherry",
  31. },
  32. wantErr: false,
  33. },
  34. {
  35. name: "Key not found",
  36. original: map[int]string{
  37. 1: "apple",
  38. 2: "banana",
  39. },
  40. keys: []int{1, 4},
  41. expected: nil,
  42. wantErr: true,
  43. },
  44. {
  45. name: "Empty keys list",
  46. original: map[int]string{
  47. 1: "apple",
  48. 2: "banana",
  49. },
  50. keys: []int{},
  51. expected: map[int]string{},
  52. wantErr: false,
  53. },
  54. }
  55. for _, tt := range tests {
  56. t.Run(tt.name, func(t *testing.T) {
  57. result, err := NewSubMap(tt.original, tt.keys)
  58. if tt.wantErr {
  59. require.ErrorContains(
  60. t, err, "NewSubMap: missing key",
  61. )
  62. require.Nil(t, result)
  63. return
  64. }
  65. require.NoError(t, err)
  66. require.Equal(t, tt.expected, result)
  67. })
  68. }
  69. }
  70. // TestNewSubMapIntersect tests the NewSubMapIntersect function for correctness.
  71. func TestNewSubMapIntersect(t *testing.T) {
  72. tests := []struct {
  73. name string
  74. original map[int]string
  75. keys []int
  76. expected map[int]string
  77. }{
  78. {
  79. name: "Successful intersection",
  80. original: map[int]string{
  81. 1: "apple",
  82. 2: "banana",
  83. 3: "cherry",
  84. 4: "date",
  85. },
  86. keys: []int{2, 3, 5},
  87. expected: map[int]string{
  88. 2: "banana",
  89. 3: "cherry",
  90. },
  91. },
  92. {
  93. name: "No intersection",
  94. original: map[int]string{
  95. 1: "apple",
  96. 2: "banana",
  97. },
  98. keys: []int{3, 4},
  99. expected: map[int]string{},
  100. },
  101. {
  102. name: "Empty original map",
  103. original: map[int]string{},
  104. keys: []int{1, 2},
  105. expected: map[int]string{},
  106. },
  107. {
  108. name: "Empty keys list",
  109. original: map[int]string{
  110. 1: "apple",
  111. 2: "banana",
  112. },
  113. keys: []int{},
  114. expected: map[int]string{},
  115. },
  116. }
  117. for _, tt := range tests {
  118. t.Run(tt.name, func(t *testing.T) {
  119. require.Equal(
  120. t, tt.expected,
  121. NewSubMapIntersect(tt.original, tt.keys))
  122. })
  123. }
  124. }