1 package funk
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7 )
8
9 func TestZipEmptyResult(t *testing.T) {
10 map1 := map[string]int{"a": 1, "b": 2}
11 array1 := []int{21, 22, 23}
12 emptySlice := []int{}
13
14 t.Run("NonSliceOrArray", func(t *testing.T) {
15 assert.Panics(t, func() { Zip(map1, array1) }, "It should panic")
16 })
17
18 t.Run("ZerosSized", func(t *testing.T) {
19 expected := []Tuple{}
20 result := Zip(emptySlice, array1)
21 assert.Equal(t, result, expected)
22 })
23 }
24
25 func zipIntsAndAssert(t *testing.T, data1, data2 interface{}) {
26 t.Run("FirstOneShorter", func(t *testing.T) {
27 expected := []Tuple{
28 {Element1: 11, Element2: 21},
29 {Element1: 12, Element2: 22},
30 {Element1: 13, Element2: 23},
31 }
32 result := Zip(data1, data2)
33 assert.Equal(t, result, expected)
34 })
35
36 t.Run("SecondOneShorter", func(t *testing.T) {
37 expected := []Tuple{
38 {Element1: 21, Element2: 11},
39 {Element1: 22, Element2: 12},
40 {Element1: 23, Element2: 13},
41 }
42 result := Zip(data2, data1)
43 assert.Equal(t, result, expected)
44 })
45 }
46
47 func TestZipSlices(t *testing.T) {
48 slice1 := []int{11, 12, 13}
49 slice2 := []int{21, 22, 23, 24, 25}
50 zipIntsAndAssert(t, slice1, slice2)
51 }
52
53 func TestZipArrays(t *testing.T) {
54 array1 := [...]int{11, 12, 13}
55 array2 := [...]int{21, 22, 23, 24, 25}
56 zipIntsAndAssert(t, array1, array2)
57 }
58
59 func TestZipStructs(t *testing.T) {
60 type struct1 struct {
61 Member1 uint16
62 Member2 string
63 }
64 type struct2 struct {
65 Member3 bool
66 }
67 type struct3 struct {
68 Member4 int
69 Member5 struct2
70 }
71
72 slice1 := []struct1{
73 {
74 Member1: 11,
75 Member2: "a",
76 },
77 {
78 Member1: 12,
79 Member2: "b",
80 },
81 {
82 Member1: 13,
83 Member2: "c",
84 },
85 }
86 slice2 := []struct3{
87 {
88 Member4: 21,
89 Member5: struct2{
90 Member3: false,
91 },
92 },
93 {
94 Member4: 22,
95 Member5: struct2{
96 Member3: true,
97 },
98 },
99 }
100
101 expected := []Tuple{
102 {
103 Element1: struct1{
104 Member1: 11,
105 Member2: "a",
106 },
107 Element2: struct3{
108 Member4: 21,
109 Member5: struct2{
110 Member3: false,
111 },
112 },
113 },
114 {
115 Element1: struct1{
116 Member1: 12,
117 Member2: "b",
118 },
119 Element2: struct3{
120 Member4: 22,
121 Member5: struct2{
122 Member3: true,
123 },
124 },
125 },
126 }
127
128 result := Zip(slice1, slice2)
129 assert.Equal(t, expected, result)
130 }
131
View as plain text