cerrado @ v0.0.8

  1// go:build unit
  2
  3package u
  4
  5import (
  6	"strconv"
  7	"testing"
  8
  9	"github.com/google/go-cmp/cmp"
 10)
 11
 12func TestFirst(t *testing.T) {
 13	testCases := []struct {
 14		name  string
 15		slice []int
 16		first int
 17		exist bool
 18	}{
 19		{
 20			name:  "multiple items slice",
 21			slice: []int{1, 2, 3},
 22			first: 1,
 23			exist: true,
 24		},
 25		{
 26			name:  "single item slice",
 27			slice: []int{1},
 28			first: 1,
 29			exist: true,
 30		},
 31		{
 32			name:  "empty slice",
 33			slice: []int{},
 34			first: 0,
 35			exist: false,
 36		},
 37	}
 38	for _, tc := range testCases {
 39		t.Run(tc.name, func(t *testing.T) {
 40
 41			first, empty := First(tc.slice)
 42
 43			if first != tc.first {
 44				t.Errorf("Error first, want %d got %d", tc.first, first)
 45			}
 46
 47			if empty != tc.exist {
 48				t.Errorf("Error empty, want %t got %t", tc.exist, empty)
 49			}
 50
 51		})
 52	}
 53}
 54
 55func TestSubList(t *testing.T) {
 56	testCases := []struct {
 57		name  string
 58		slice []int
 59		size  int
 60		want  [][]int
 61	}{
 62		{
 63			name:  "sigle size sub list",
 64			slice: []int{1, 2, 3},
 65			size:  1,
 66			want:  [][]int{{1}, {2}, {3}},
 67		},
 68		{
 69			name:  "multiple size sub list",
 70			slice: []int{1, 2, 3, 4},
 71			size:  2,
 72			want:  [][]int{{1, 2}, {3, 4}},
 73		},
 74		{
 75			name:  "uneven multiple size sub list",
 76			slice: []int{1, 2, 3, 4, 5},
 77			size:  2,
 78			want:  [][]int{{1, 2}, {3, 4}, {5}},
 79		},
 80		{
 81			name:  "empty sub list",
 82			slice: []int{},
 83			size:  2,
 84			want:  [][]int{{}},
 85		},
 86	}
 87	for _, tc := range testCases {
 88		t.Run(tc.name, func(t *testing.T) {
 89
 90			subList := ChunkBy(tc.slice, tc.size)
 91
 92			if diff := cmp.Diff(tc.want, subList); diff != "" {
 93				t.Errorf("Wrong result given - wanted + got\n %s", diff)
 94			}
 95		})
 96	}
 97}
 98
 99func TestFirstOrZero(t *testing.T) {
100	testCases := []struct {
101		name  string
102		slice []int
103		first int
104	}{
105		{
106			name:  "multiple items slice",
107			slice: []int{1, 2, 3},
108			first: 1,
109		},
110		{
111			name:  "single item slice",
112			slice: []int{1},
113			first: 1,
114		},
115		{
116			name:  "empty slice",
117			slice: []int{},
118			first: 0,
119		},
120	}
121	for _, tc := range testCases {
122		t.Run(tc.name, func(t *testing.T) {
123
124			first := FirstOrZero(tc.slice)
125
126			if first != tc.first {
127				t.Errorf("Error first, want %d got %d", tc.first, first)
128			}
129
130		})
131	}
132}
133
134func TestMap(t *testing.T) {
135	testCases := []struct {
136		name string
137		in   []int
138		out  []string
139	}{
140		{
141			name: "empty",
142			in:   []int{},
143			out:  []string{},
144		},
145		{
146			name: "not empty",
147			in:   []int{1, 2, 3},
148			out:  []string{"1", "2", "3"},
149		},
150	}
151
152	for _, tc := range testCases {
153		t.Run(tc.name, func(t *testing.T) {
154			out := Map(tc.in, func(v int) string { return strconv.Itoa(v) })
155
156			if diff := cmp.Diff(tc.out, out); diff != "" {
157				t.Errorf("Map error:\n%s", diff)
158			}
159		})
160	}
161}