slicesx_test.go (4172B)
1 package slicesx 2 3 import ( 4 "slices" 5 "strconv" 6 "testing" 7 ) 8 9 func TestMap(t *testing.T) { 10 list := Generate(3, func(ii int) int { 11 return ii 12 }) 13 14 t.Run("MapSafe", func(t *testing.T) { 15 if _, err := MapSafe(list, func(s int) int { 16 panic("test panic") 17 }); err == nil { 18 t.Fatalf("expected error, not nil") 19 } 20 }) 21 22 t.Run("MapIndexSafe", func(t *testing.T) { 23 if _, err := MapIndexSafe(list, func(ii int, s int) int { 24 panic("test panic") 25 }); err == nil { 26 t.Fatalf("expected error, not nil") 27 } 28 }) 29 30 t.Run("MapSafe", func(t *testing.T) { 31 if got, err := MapSafe(list, func(s int) string { 32 return strconv.Itoa(s) 33 }); err != nil { 34 t.Fatalf("unexpected error, not nil") 35 } else { 36 want := []string{"0", "1", "2"} 37 if !slices.Equal(got, want) { 38 t.Fatalf("result mismatch: got=%v, want=%v", got, want) 39 } 40 } 41 }) 42 43 t.Run("MapIndexSafe", func(t *testing.T) { 44 if got, err := MapIndexSafe(list, func(ii int, s int) string { 45 return strconv.Itoa(s + ii) 46 }); err != nil { 47 t.Fatalf("unexpected error, not nil") 48 } else { 49 want := []string{"0", "2", "4"} 50 if !slices.Equal(got, want) { 51 t.Fatalf("result mismatch: got=%v, want=%v", got, want) 52 } 53 } 54 }) 55 56 t.Run("Map", func(t *testing.T) { 57 got := Map(list, func(s int) string { 58 return strconv.Itoa(s) 59 }) 60 want := []string{"0", "1", "2"} 61 if !slices.Equal(got, want) { 62 t.Fatalf("result mismatch: got=%v, want=%v", got, want) 63 } 64 }) 65 66 t.Run("MapIndex", func(t *testing.T) { 67 got := MapIndex(list, func(ii int, s int) string { 68 return strconv.Itoa(s + ii) 69 }) 70 want := []string{"0", "2", "4"} 71 if !slices.Equal(got, want) { 72 t.Fatalf("result mismatch: got=%v, want=%v", got, want) 73 } 74 }) 75 } 76 77 func TestPop(t *testing.T) { 78 t.Run("PopFront", func(t *testing.T) { 79 original := Generate(5, func(ii int) int { 80 return ii 81 }) 82 83 list := Generate(5, func(ii int) int { 84 return ii 85 }) 86 87 for _, want := range original { 88 length := len(list) 89 90 head, _ := PopFrontSafe(&list) 91 92 if len(list) == length { 93 t.Fatalf("failed to modify slice") 94 } 95 96 if head != want { 97 t.Fatalf("popped wrong value: got=%d, want=%d", head, want) 98 } 99 } 100 101 v, ok := PopFrontSafe(&list) 102 if v != 0 || ok == true { 103 t.Fatalf("unexpected value from popping empty list: %v", v) 104 } 105 }) 106 107 t.Run("PopBack", func(t *testing.T) { 108 original := Generate(5, func(ii int) int { 109 return ii 110 }) 111 112 slices.Reverse(original) 113 114 list := Generate(5, func(ii int) int { 115 return ii 116 }) 117 118 for _, want := range original { 119 length := len(list) 120 121 tail, _ := PopBackSafe(&list) 122 123 if len(list) == length { 124 t.Fatalf("failed to modify slice") 125 } 126 127 if tail != want { 128 t.Fatalf("popped wrong value: got=%d, want=%d", tail, want) 129 } 130 } 131 132 v, ok := PopBackSafe(&list) 133 if v != 0 || ok == true { 134 t.Fatalf("unexpected value from popping empty list: %v", v) 135 } 136 }) 137 } 138 139 func TestFilterMap(t *testing.T) { 140 input := []string{ 141 "0", 142 "nan", 143 "1", 144 "nan", 145 "2", 146 "nan", 147 "3", 148 "nan", 149 "4", 150 "nan", 151 "5", 152 "nan", 153 "6", 154 "nan", 155 "7", 156 "nan", 157 "8", 158 "nan", 159 "9", 160 } 161 162 got := FilterMap(input, func(v string) (int, bool) { 163 n, err := strconv.Atoi(v) 164 return n, err == nil 165 }) 166 167 want := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 168 169 if !slices.Equal(got, want) { 170 t.Fatalf("got=%v, want=%v", got, want) 171 } 172 } 173 174 func TestTakeAllFunc(t *testing.T) { 175 input := Generate(10, func(n int) int { return n }) 176 177 evens, ok := TakeAllFunc(&input, func(n int) bool { 178 return n%2 == 0 179 }) 180 181 if !ok { 182 t.Fatalf("expected ok, got not ok") 183 } 184 185 wantEvens := []int{0, 2, 4, 6, 8} 186 187 if !slices.Equal(evens, wantEvens) { 188 t.Fatalf("got=%v, want=%v", evens, wantEvens) 189 } 190 191 wantInput := []int{1, 3, 5, 7, 9} 192 193 if !slices.Equal(input, wantInput) { 194 t.Fatalf("got=%v, want=%v", input, wantInput) 195 } 196 } 197 198 func TestTakeFunc(t *testing.T) { 199 input := Generate(10, func(n int) int { return n }) 200 201 got, ok := TakeFunc(&input, func(n int) bool { 202 return n == 5 203 }) 204 205 if !ok { 206 t.Fatalf("expected ok, got not ok") 207 } 208 209 want := 5 210 211 if want != got { 212 t.Fatalf("got=%v, want=%v", got, want) 213 } 214 215 if slices.Contains(input, 5) { 216 t.Fatalf("failed to remove %d from list: %v", want, input) 217 } 218 }