1package funk 2 3import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7) 8 9func 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 25func 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 47func 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 53func 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 59func 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