jackhammer

Utilities for Go
Log | Files | Refs | README | LICENSE

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 }