go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/collections/set_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package collections 9 10 import ( 11 "sort" 12 "testing" 13 14 . "go.charczuk.com/sdk/assert" 15 ) 16 17 func Test_Set(t *testing.T) { 18 s := make(Set[int]) 19 20 s.Add(10) 21 s.Add(11) 22 ItsEqual(t, true, s.Has(10)) 23 ItsEqual(t, true, s.Has(11)) 24 ItsEqual(t, false, s.Has(12)) 25 26 s.Delete(10) 27 ItsEqual(t, false, s.Has(10)) 28 ItsEqual(t, true, s.Has(11)) 29 ItsEqual(t, false, s.Has(12)) 30 } 31 32 func Test_NewSet(t *testing.T) { 33 s := NewSet([]rune("foobar")) 34 ItsEqual(t, true, s.Has('f')) 35 ItsEqual(t, true, s.Has('o')) 36 ItsEqual(t, true, s.Has('b')) 37 ItsEqual(t, true, s.Has('a')) 38 ItsEqual(t, true, s.Has('r')) 39 ItsEqual(t, false, s.Has('z')) 40 } 41 42 func Test_Set_PopRandom(t *testing.T) { 43 s0 := make(Set[int]) 44 s1 := make(Set[int]) 45 46 s0.Add(10) 47 s0.Add(11) 48 s0.Add(12) 49 s0.Add(13) 50 s0.Add(14) 51 52 for x := 0; x < 5; x++ { 53 v, ok := s0.PopRandom() 54 ItsEqual(t, true, ok) 55 s1.Add(v) 56 } 57 58 _, ok := s0.PopRandom() 59 ItsEqual(t, false, ok) 60 61 ItsEqual(t, 0, len(s0)) 62 ItsEqual(t, 5, len(s1)) 63 ItsEqual(t, true, s1.Has(10)) 64 ItsEqual(t, true, s1.Has(11)) 65 ItsEqual(t, true, s1.Has(12)) 66 ItsEqual(t, true, s1.Has(13)) 67 ItsEqual(t, true, s1.Has(14)) 68 } 69 70 func Test_Set_Intersect(t *testing.T) { 71 s0 := make(Set[int]) 72 73 s0.Add(10) 74 s0.Add(11) 75 s0.Add(12) 76 77 s1 := make(Set[int]) 78 79 s1.Add(11) 80 s1.Add(12) 81 s1.Add(13) 82 83 union := s0.Intersect(s1) 84 ItsEqual(t, 2, len(union)) 85 ItsEqual(t, false, union.Has(10)) 86 ItsEqual(t, true, union.Has(11)) 87 ItsEqual(t, true, union.Has(12)) 88 ItsEqual(t, false, union.Has(13)) 89 } 90 91 func Test_Set_Disjoint(t *testing.T) { 92 s0 := make(Set[int]) 93 94 s0.Add(10) 95 s0.Add(11) 96 s0.Add(12) 97 98 s1 := make(Set[int]) 99 100 s1.Add(11) 101 s1.Add(12) 102 s1.Add(13) 103 104 union := s0.Disjoint(s1) 105 ItsEqual(t, 2, len(union)) 106 ItsEqual(t, true, union.Has(10)) 107 ItsEqual(t, false, union.Has(11)) 108 ItsEqual(t, false, union.Has(12)) 109 ItsEqual(t, true, union.Has(13)) 110 } 111 112 func Test_Set_Union(t *testing.T) { 113 s0 := make(Set[int]) 114 115 s0.Add(10) 116 s0.Add(11) 117 s0.Add(12) 118 119 s1 := make(Set[int]) 120 121 s1.Add(11) 122 s1.Add(12) 123 s1.Add(13) 124 125 union := s0.Union(s1) 126 ItsEqual(t, 4, len(union)) 127 ItsEqual(t, true, union.Has(10)) 128 ItsEqual(t, true, union.Has(11)) 129 ItsEqual(t, true, union.Has(12)) 130 ItsEqual(t, true, union.Has(13)) 131 } 132 133 func Test_Set_Diff(t *testing.T) { 134 s0 := make(Set[int]) 135 136 s0.Add(10) 137 s0.Add(11) 138 s0.Add(12) 139 140 s1 := make(Set[int]) 141 142 s1.Add(11) 143 s1.Add(12) 144 s1.Add(13) 145 146 added := s0.DiffAdded(s1) 147 ItsEqual(t, 1, len(added)) 148 ItsEqual(t, true, added.Has(13)) 149 150 removed := s0.DiffRemoved(s1) 151 ItsEqual(t, 1, len(removed)) 152 ItsEqual(t, true, removed.Has(10)) 153 } 154 155 func Test_Set_Equals(t *testing.T) { 156 s0 := make(Set[int]) 157 158 s0.Add(10) 159 s0.Add(11) 160 s0.Add(12) 161 162 s1 := make(Set[int]) 163 164 s1.Add(10) 165 s1.Add(11) 166 s1.Add(12) 167 168 ItsTrue(t, s0.Equals(s1)) 169 ItsTrue(t, s1.Equals(s0)) 170 } 171 172 func Test_Set_Equals_failing_differentSize(t *testing.T) { 173 s0 := make(Set[int]) 174 175 s0.Add(10) 176 s0.Add(11) 177 178 s1 := make(Set[int]) 179 180 s1.Add(10) 181 s1.Add(11) 182 s1.Add(12) 183 184 ItsFalse(t, s0.Equals(s1)) 185 ItsFalse(t, s1.Equals(s0)) 186 } 187 188 func Test_Set_Equals_failing_sameSize(t *testing.T) { 189 s0 := make(Set[int]) 190 191 s0.Add(10) 192 s0.Add(11) 193 s0.Add(13) 194 195 s1 := make(Set[int]) 196 197 s1.Add(10) 198 s1.Add(11) 199 s1.Add(12) 200 201 ItsFalse(t, s0.Equals(s1)) 202 ItsFalse(t, s1.Equals(s0)) 203 } 204 205 func Test_Set_Copy(t *testing.T) { 206 s0 := make(Set[int]) 207 208 s0.Add(10) 209 s0.Add(11) 210 s0.Add(12) 211 212 s1 := s0.Copy() 213 s0values := s0.Values() 214 sort.Ints(s0values) 215 s1values := s1.Values() 216 sort.Ints(s1values) 217 218 ItsEqual(t, s0values, s1values) 219 } 220 221 func Test_Set_CopyAdd(t *testing.T) { 222 s0 := make(Set[int]) 223 224 s0.Add(10) 225 s0.Add(11) 226 s0.Add(12) 227 228 s1 := s0.CopyAdd(13) 229 230 ItsNotEqual(t, s0.Values(), s1.Values()) 231 ItsLen(t, s1, 4) 232 ItsTrue(t, s1.Has(10)) 233 ItsTrue(t, s1.Has(11)) 234 ItsTrue(t, s1.Has(12)) 235 ItsTrue(t, s1.Has(13)) 236 } 237 238 func Test_Set_CopyRemove(t *testing.T) { 239 s0 := make(Set[int]) 240 241 s0.Add(10) 242 s0.Add(11) 243 s0.Add(12) 244 s0.Add(13) 245 246 s1 := s0.CopyRemove(10) 247 248 ItsNotEqual(t, s0.Values(), s1.Values()) 249 ItsLen(t, s1, 3) 250 ItsFalse(t, s1.Has(10)) 251 ItsTrue(t, s1.Has(11)) 252 ItsTrue(t, s1.Has(12)) 253 ItsTrue(t, s1.Has(13)) 254 }