...

Source file src/github.com/thoas/go-funk/zip_test.go

Documentation: github.com/thoas/go-funk

     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