sigs.k8s.io/kueue@v0.6.2/pkg/util/slices/slices_test.go (about) 1 /* 2 Copyright 2023 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package slices 18 19 import ( 20 "testing" 21 22 "github.com/google/go-cmp/cmp" 23 ) 24 25 func TestToRefMap(t *testing.T) { 26 data := [3]int{0xa, 0xb, 0xc} 27 cases := map[string]struct { 28 slice []int 29 wantMap map[int]*int 30 }{ 31 "preserve nil": { 32 slice: nil, 33 wantMap: nil, 34 }, 35 "preserve empty": { 36 slice: []int{}, 37 wantMap: map[int]*int{}, 38 }, 39 "slice": { 40 slice: data[:], 41 wantMap: map[int]*int{ 42 0xd: &data[0], 43 0xe: &data[1], 44 0xf: &data[2], 45 }, 46 }, 47 } 48 for name, tc := range cases { 49 t.Run(name, func(t *testing.T) { 50 result := ToRefMap(tc.slice, func(p *int) int { return *p + 3 }) 51 if diff := cmp.Diff(tc.wantMap, result); diff != "" { 52 t.Errorf("Unexpected result (-want,+got):\n%s", diff) 53 } 54 }) 55 } 56 } 57 58 func TestToCmpNoOrder(t *testing.T) { 59 cases := map[string]struct { 60 sliceA []int 61 sliceB []int 62 want bool 63 }{ 64 "equal sets": { 65 sliceA: []int{1, 2, 3}, 66 sliceB: []int{3, 2, 1}, 67 want: true, 68 }, 69 "equal multisets": { 70 sliceA: []int{1, 1, 2}, 71 sliceB: []int{1, 2, 1}, 72 want: true, 73 }, 74 "unequal multisets": { 75 sliceA: []int{1, 2, 2}, 76 sliceB: []int{1, 2, 1}, 77 want: false, 78 }, 79 "unequal sets": { 80 sliceA: []int{1, 2}, 81 sliceB: []int{1, 1}, 82 want: false, 83 }, 84 "slice A is longer": { 85 sliceA: []int{1, 2, 3}, 86 sliceB: []int{1, 2}, 87 want: false, 88 }, 89 "slice B is longer": { 90 sliceA: []int{1, 2}, 91 sliceB: []int{1, 2, 3}, 92 want: false, 93 }, 94 } 95 96 for name, tc := range cases { 97 t.Run(name, func(t *testing.T) { 98 res := CmpNoOrder[int](tc.sliceA, tc.sliceB) 99 if res != tc.want { 100 t.Errorf("Unexpected result: want: %v, got: %v", tc.want, res) 101 } 102 }) 103 } 104 } 105 106 func TestPick(t *testing.T) { 107 cases := map[string]struct { 108 testSlice []int 109 want []int 110 }{ 111 "nil input": { 112 testSlice: nil, 113 want: nil, 114 }, 115 "empty input": { 116 testSlice: []int{}, 117 want: nil, 118 }, 119 "no match": { 120 testSlice: []int{1, 3, 5, 7, 9}, 121 want: nil, 122 }, 123 "match": { 124 testSlice: []int{1, 2, 3, 4, 5, 6, 7, 8, 9}, 125 want: []int{2, 4, 6, 8}, 126 }, 127 } 128 129 for name, tc := range cases { 130 t.Run(name, func(t *testing.T) { 131 result := Pick(tc.testSlice, func(i *int) bool { return (*i)%2 == 0 }) 132 if diff := cmp.Diff(tc.want, result); diff != "" { 133 t.Errorf("Unexpected result (-want,+got):\n%s", diff) 134 } 135 }) 136 } 137 }