github.com/searKing/golang/go@v1.2.74/exp/slices/split_test.go (about) 1 // Copyright 2022 The searKing Author. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package slices_test 6 7 import ( 8 "testing" 9 10 slices_ "github.com/searKing/golang/go/exp/slices" 11 "golang.org/x/exp/slices" 12 ) 13 14 var splitTests = []struct { 15 s []int 16 sep int 17 want [][]int 18 }{ 19 {nil, -1, nil}, 20 {nil, 0, nil}, 21 {nil, 1, nil}, 22 {[]int{}, -1, [][]int{}}, 23 {[]int{}, 0, [][]int{}}, 24 {[]int{}, 1, [][]int{}}, 25 {[]int{1}, -1, [][]int{{1}}}, 26 {[]int{1}, 0, [][]int{{1}}}, 27 {[]int{1}, 1, [][]int{{1}}}, 28 {[]int{1}, 2, [][]int{{1}}}, 29 {[]int{1, 2, 3}, -1, [][]int{{1}, {2}, {3}}}, 30 {[]int{1, 2, 3}, 0, [][]int{{1}, {2}, {3}}}, 31 {[]int{1, 2, 3}, 1, [][]int{{1}, {2}, {3}}}, 32 {[]int{1, 2, 3}, 2, [][]int{{1, 2}, {3}}}, 33 {[]int{1, 2, 3}, 3, [][]int{{1, 2, 3}}}, 34 {[]int{1, 2, 3}, 4, [][]int{{1, 2, 3}}}, 35 {[]int{1, 2, 3, 4}, -1, [][]int{{1}, {2}, {3}, {4}}}, 36 {[]int{1, 2, 3, 4}, 0, [][]int{{1}, {2}, {3}, {4}}}, 37 {[]int{1, 2, 3, 4}, 1, [][]int{{1}, {2}, {3}, {4}}}, 38 {[]int{1, 2, 3, 4}, 2, [][]int{{1, 2}, {3, 4}}}, 39 {[]int{1, 2, 3, 4}, 3, [][]int{{1, 2, 3}, {4}}}, 40 {[]int{1, 2, 3, 4}, 4, [][]int{{1, 2, 3, 4}}}, 41 {[]int{1, 2, 3, 4}, 5, [][]int{{1, 2, 3, 4}}}, 42 } 43 44 func TestSplit(t *testing.T) { 45 for i, test := range splitTests { 46 got := slices_.Split(test.s, test.sep) 47 if len(test.want) != len(got) { 48 t.Errorf("#%d: Split(%v, %v) = %v, want %v", i, test.s, test.sep, got, test.want) 49 continue 50 } 51 for i := range got { 52 if !slices.Equal(got[i], test.want[i]) { 53 t.Errorf("#%d: Split(%v, %v) = %v, want %v", i, test.s, test.sep, got, test.want) 54 break 55 } 56 } 57 } 58 } 59 60 var splitNTests = []struct { 61 s []int 62 sep int 63 n int 64 want [][]int 65 }{ 66 {nil, -1, -1, nil}, 67 {nil, -1, 0, nil}, 68 {nil, -1, 1, nil}, 69 {nil, 0, -1, nil}, 70 {nil, 0, 0, nil}, 71 {nil, 0, 1, nil}, 72 {[]int{}, -1, -1, nil}, 73 {[]int{}, -1, 0, nil}, 74 {[]int{}, -1, 1, [][]int{{}}}, 75 {[]int{}, 0, -1, nil}, 76 {[]int{}, 0, 0, nil}, 77 {[]int{}, 0, 1, [][]int{}}, 78 {[]int{}, 1, -1, nil}, 79 {[]int{}, 1, 0, nil}, 80 {[]int{}, 1, 1, [][]int{{}}}, 81 {[]int{1}, -1, -1, [][]int{{1}}}, 82 {[]int{1}, -1, 0, nil}, 83 {[]int{1}, -1, 1, [][]int{{1}}}, 84 {[]int{1}, -1, 2, [][]int{{1}}}, 85 {[]int{1}, 0, -1, [][]int{{1}}}, 86 {[]int{1}, 0, 0, nil}, 87 {[]int{1}, 0, 1, [][]int{{1}}}, 88 {[]int{1}, 0, 2, [][]int{{1}}}, 89 {[]int{1}, 1, -1, [][]int{{1}}}, 90 {[]int{1}, 1, 0, nil}, 91 {[]int{1}, 1, 1, [][]int{{1}}}, 92 {[]int{1}, 1, 2, [][]int{{1}}}, 93 {[]int{1}, 2, -1, [][]int{{1}}}, 94 {[]int{1}, 2, 0, nil}, 95 {[]int{1}, 2, 1, [][]int{{1}}}, 96 {[]int{1}, 2, 2, [][]int{{1}}}, 97 {[]int{1, 2, 3}, -1, -1, [][]int{{1}, {2}, {3}}}, 98 {[]int{1, 2, 3}, -1, 0, nil}, 99 {[]int{1, 2, 3}, -1, 1, [][]int{{1, 2, 3}}}, 100 {[]int{1, 2, 3}, -1, 2, [][]int{{1}, {2, 3}}}, 101 {[]int{1, 2, 3}, -1, 3, [][]int{{1}, {2}, {3}}}, 102 {[]int{1, 2, 3}, -1, 4, [][]int{{1}, {2}, {3}}}, 103 {[]int{1, 2, 3}, 0, -1, [][]int{{1}, {2}, {3}}}, 104 {[]int{1, 2, 3}, 0, 0, nil}, 105 {[]int{1, 2, 3}, 0, 1, [][]int{{1, 2, 3}}}, 106 {[]int{1, 2, 3}, 0, 2, [][]int{{1}, {2, 3}}}, 107 {[]int{1, 2, 3}, 0, 3, [][]int{{1}, {2}, {3}}}, 108 {[]int{1, 2, 3}, 0, 4, [][]int{{1}, {2}, {3}}}, 109 {[]int{1, 2, 3}, 1, -1, [][]int{{1}, {2}, {3}}}, 110 {[]int{1, 2, 3}, 1, 0, nil}, 111 {[]int{1, 2, 3}, 1, 1, [][]int{{1, 2, 3}}}, 112 {[]int{1, 2, 3}, 1, 2, [][]int{{1}, {2, 3}}}, 113 {[]int{1, 2, 3}, 1, 3, [][]int{{1}, {2}, {3}}}, 114 {[]int{1, 2, 3}, 1, 4, [][]int{{1}, {2}, {3}}}, 115 {[]int{1, 2, 3}, 2, -1, [][]int{{1, 2}, {3}}}, 116 {[]int{1, 2, 3}, 2, 0, nil}, 117 {[]int{1, 2, 3}, 2, 1, [][]int{{1, 2, 3}}}, 118 {[]int{1, 2, 3}, 2, 2, [][]int{{1, 2}, {3}}}, 119 {[]int{1, 2, 3}, 2, 3, [][]int{{1, 2}, {3}}}, 120 {[]int{1, 2, 3}, 2, 4, [][]int{{1, 2}, {3}}}, 121 {[]int{1, 2, 3}, 3, -1, [][]int{{1, 2, 3}}}, 122 {[]int{1, 2, 3}, 3, 0, nil}, 123 {[]int{1, 2, 3}, 3, 1, [][]int{{1, 2, 3}}}, 124 {[]int{1, 2, 3}, 3, 2, [][]int{{1, 2, 3}}}, 125 {[]int{1, 2, 3}, 3, 3, [][]int{{1, 2, 3}}}, 126 {[]int{1, 2, 3}, 3, 4, [][]int{{1, 2, 3}}}, 127 {[]int{1, 2, 3}, 4, -1, [][]int{{1, 2, 3}}}, 128 {[]int{1, 2, 3}, 4, 0, nil}, 129 {[]int{1, 2, 3}, 4, 1, [][]int{{1, 2, 3}}}, 130 {[]int{1, 2, 3}, 4, 2, [][]int{{1, 2, 3}}}, 131 {[]int{1, 2, 3}, 4, 3, [][]int{{1, 2, 3}}}, 132 {[]int{1, 2, 3}, 4, 4, [][]int{{1, 2, 3}}}, 133 {[]int{1, 2, 3, 4}, -1, -1, [][]int{{1}, {2}, {3}, {4}}}, 134 {[]int{1, 2, 3, 4}, -1, 0, nil}, 135 {[]int{1, 2, 3, 4}, -1, 1, [][]int{{1, 2, 3, 4}}}, 136 {[]int{1, 2, 3, 4}, -1, 2, [][]int{{1, 2}, {3, 4}}}, 137 {[]int{1, 2, 3, 4}, -1, 3, [][]int{{1}, {2}, {3, 4}}}, 138 {[]int{1, 2, 3, 4}, -1, 4, [][]int{{1}, {2}, {3}, {4}}}, 139 {[]int{1, 2, 3, 4}, 0, -1, [][]int{{1}, {2}, {3}, {4}}}, 140 {[]int{1, 2, 3, 4}, 0, 0, nil}, 141 {[]int{1, 2, 3, 4}, 0, 1, [][]int{{1, 2, 3, 4}}}, 142 {[]int{1, 2, 3, 4}, 0, 2, [][]int{{1, 2}, {3, 4}}}, 143 {[]int{1, 2, 3, 4}, 0, 3, [][]int{{1}, {2}, {3, 4}}}, 144 {[]int{1, 2, 3, 4}, 0, 4, [][]int{{1}, {2}, {3}, {4}}}, 145 {[]int{1, 2, 3, 4}, 1, -1, [][]int{{1}, {2}, {3}, {4}}}, 146 {[]int{1, 2, 3, 4}, 1, 0, nil}, 147 {[]int{1, 2, 3, 4}, 1, 1, [][]int{{1, 2, 3, 4}}}, 148 {[]int{1, 2, 3, 4}, 1, 2, [][]int{{1}, {2, 3, 4}}}, 149 {[]int{1, 2, 3, 4}, 1, 3, [][]int{{1}, {2}, {3, 4}}}, 150 {[]int{1, 2, 3, 4}, 1, 4, [][]int{{1}, {2}, {3}, {4}}}, 151 {[]int{1, 2, 3, 4}, 2, -1, [][]int{{1, 2}, {3, 4}}}, 152 {[]int{1, 2, 3, 4}, 2, 0, nil}, 153 {[]int{1, 2, 3, 4}, 2, 1, [][]int{{1, 2, 3, 4}}}, 154 {[]int{1, 2, 3, 4}, 2, 2, [][]int{{1, 2}, {3, 4}}}, 155 {[]int{1, 2, 3, 4}, 2, 3, [][]int{{1, 2}, {3, 4}}}, 156 {[]int{1, 2, 3, 4}, 2, 4, [][]int{{1, 2}, {3, 4}}}, 157 {[]int{1, 2, 3, 4}, 3, -1, [][]int{{1, 2, 3}, {4}}}, 158 {[]int{1, 2, 3, 4}, 3, 0, nil}, 159 {[]int{1, 2, 3, 4}, 3, 1, [][]int{{1, 2, 3, 4}}}, 160 {[]int{1, 2, 3, 4}, 3, 2, [][]int{{1, 2, 3}, {4}}}, 161 {[]int{1, 2, 3, 4}, 3, 3, [][]int{{1, 2, 3}, {4}}}, 162 {[]int{1, 2, 3, 4}, 3, 4, [][]int{{1, 2, 3}, {4}}}, 163 {[]int{1, 2, 3, 4}, 3, 5, [][]int{{1, 2, 3}, {4}}}, 164 {[]int{1, 2, 3, 4}, 4, -1, [][]int{{1, 2, 3, 4}}}, 165 {[]int{1, 2, 3, 4}, 4, 0, nil}, 166 {[]int{1, 2, 3, 4}, 4, 1, [][]int{{1, 2, 3, 4}}}, 167 {[]int{1, 2, 3, 4}, 4, 2, [][]int{{1, 2, 3, 4}}}, 168 {[]int{1, 2, 3, 4}, 4, 3, [][]int{{1, 2, 3, 4}}}, 169 {[]int{1, 2, 3, 4}, 4, 4, [][]int{{1, 2, 3, 4}}}, 170 {[]int{1, 2, 3, 4}, 4, 5, [][]int{{1, 2, 3, 4}}}, 171 {[]int{1, 2, 3, 4}, 5, -1, [][]int{{1, 2, 3, 4}}}, 172 {[]int{1, 2, 3, 4}, 5, 0, nil}, 173 {[]int{1, 2, 3, 4}, 5, 1, [][]int{{1, 2, 3, 4}}}, 174 {[]int{1, 2, 3, 4}, 5, 2, [][]int{{1, 2, 3, 4}}}, 175 {[]int{1, 2, 3, 4}, 5, 3, [][]int{{1, 2, 3, 4}}}, 176 {[]int{1, 2, 3, 4}, 5, 4, [][]int{{1, 2, 3, 4}}}, 177 {[]int{1, 2, 3, 4}, 5, 5, [][]int{{1, 2, 3, 4}}}, 178 } 179 180 func TestSplitN(t *testing.T) { 181 for i, test := range splitNTests { 182 got := slices_.SplitN(test.s, test.sep, test.n) 183 if len(test.want) != len(got) { 184 t.Errorf("#%d: SplitN(%v, %v, %v) = %v, want %v", i, test.s, test.sep, test.n, got, test.want) 185 continue 186 } 187 for i := range got { 188 if !slices.Equal(got[i], test.want[i]) { 189 t.Errorf("#%d: SplitN(%v, %v, %v) = %v, want %v", i, test.s, test.sep, test.n, got, test.want) 190 break 191 } 192 } 193 } 194 }