github.com/zhongdalu/gf@v1.0.0/g/container/gset/gset_z_unit_test.go (about) 1 // Copyright 2018 gf Author(https://github.com/zhongdalu/gf). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/zhongdalu/gf. 6 7 // go test *.go 8 9 package gset_test 10 11 import ( 12 "github.com/zhongdalu/gf/g/container/garray" 13 "github.com/zhongdalu/gf/g/container/gset" 14 "github.com/zhongdalu/gf/g/test/gtest" 15 "strings" 16 17 "testing" 18 ) 19 20 func TestSet_New(t *testing.T) { 21 gtest.Case(t, func() { 22 s := gset.New() 23 s.Add(1).Add(1).Add(2) 24 s.Add([]interface{}{3, 4}...) 25 gtest.Assert(s.Size(), 4) 26 gtest.AssertIN(1, s.Slice()) 27 gtest.AssertIN(2, s.Slice()) 28 gtest.AssertIN(3, s.Slice()) 29 gtest.AssertIN(4, s.Slice()) 30 gtest.AssertNI(0, s.Slice()) 31 gtest.Assert(s.Contains(4), true) 32 gtest.Assert(s.Contains(5), false) 33 s.Remove(1) 34 gtest.Assert(s.Size(), 3) 35 s.Clear() 36 gtest.Assert(s.Size(), 0) 37 }) 38 } 39 40 func TestSet_Basic(t *testing.T) { 41 gtest.Case(t, func() { 42 s := gset.NewSet() 43 s.Add(1).Add(1).Add(2) 44 s.Add([]interface{}{3, 4}...) 45 gtest.Assert(s.Size(), 4) 46 gtest.AssertIN(1, s.Slice()) 47 gtest.AssertIN(2, s.Slice()) 48 gtest.AssertIN(3, s.Slice()) 49 gtest.AssertIN(4, s.Slice()) 50 gtest.AssertNI(0, s.Slice()) 51 gtest.Assert(s.Contains(4), true) 52 gtest.Assert(s.Contains(5), false) 53 s.Remove(1) 54 gtest.Assert(s.Size(), 3) 55 s.Clear() 56 gtest.Assert(s.Size(), 0) 57 }) 58 } 59 60 func TestSet_Iterator(t *testing.T) { 61 gtest.Case(t, func() { 62 s := gset.NewSet() 63 s.Add(1).Add(2).Add(3) 64 gtest.Assert(s.Size(), 3) 65 66 a1 := garray.New() 67 a2 := garray.New() 68 s.Iterator(func(v interface{}) bool { 69 a1.Append(1) 70 return false 71 }) 72 s.Iterator(func(v interface{}) bool { 73 a2.Append(1) 74 return true 75 }) 76 gtest.Assert(a1.Len(), 1) 77 gtest.Assert(a2.Len(), 3) 78 }) 79 } 80 81 func TestSet_LockFunc(t *testing.T) { 82 gtest.Case(t, func() { 83 s := gset.NewSet() 84 s.Add(1).Add(2).Add(3) 85 gtest.Assert(s.Size(), 3) 86 s.LockFunc(func(m map[interface{}]struct{}) { 87 delete(m, 1) 88 }) 89 gtest.Assert(s.Size(), 2) 90 s.RLockFunc(func(m map[interface{}]struct{}) { 91 gtest.Assert(m, map[interface{}]struct{}{ 92 3: struct{}{}, 93 2: struct{}{}, 94 }) 95 }) 96 }) 97 } 98 99 func TestSet_Equal(t *testing.T) { 100 gtest.Case(t, func() { 101 s1 := gset.NewSet() 102 s2 := gset.NewSet() 103 s3 := gset.NewSet() 104 s1.Add(1).Add(2).Add(3) 105 s2.Add(1).Add(2).Add(3) 106 s3.Add(1).Add(2).Add(3).Add(4) 107 gtest.Assert(s1.Equal(s2), true) 108 gtest.Assert(s1.Equal(s3), false) 109 }) 110 } 111 112 func TestSet_IsSubsetOf(t *testing.T) { 113 gtest.Case(t, func() { 114 s1 := gset.NewSet() 115 s2 := gset.NewSet() 116 s3 := gset.NewSet() 117 s1.Add(1).Add(2) 118 s2.Add(1).Add(2).Add(3) 119 s3.Add(1).Add(2).Add(3).Add(4) 120 gtest.Assert(s1.IsSubsetOf(s2), true) 121 gtest.Assert(s2.IsSubsetOf(s3), true) 122 gtest.Assert(s1.IsSubsetOf(s3), true) 123 gtest.Assert(s2.IsSubsetOf(s1), false) 124 gtest.Assert(s3.IsSubsetOf(s2), false) 125 }) 126 } 127 128 func TestSet_Union(t *testing.T) { 129 gtest.Case(t, func() { 130 s1 := gset.NewSet() 131 s2 := gset.NewSet() 132 s1.Add(1).Add(2) 133 s2.Add(3).Add(4) 134 s3 := s1.Union(s2) 135 gtest.Assert(s3.Contains(1), true) 136 gtest.Assert(s3.Contains(2), true) 137 gtest.Assert(s3.Contains(3), true) 138 gtest.Assert(s3.Contains(4), true) 139 }) 140 } 141 142 func TestSet_Diff(t *testing.T) { 143 gtest.Case(t, func() { 144 s1 := gset.NewSet() 145 s2 := gset.NewSet() 146 s1.Add(1).Add(2).Add(3) 147 s2.Add(3).Add(4).Add(5) 148 s3 := s1.Diff(s2) 149 gtest.Assert(s3.Contains(1), true) 150 gtest.Assert(s3.Contains(2), true) 151 gtest.Assert(s3.Contains(3), false) 152 gtest.Assert(s3.Contains(4), false) 153 }) 154 } 155 156 func TestSet_Intersect(t *testing.T) { 157 gtest.Case(t, func() { 158 s1 := gset.NewSet() 159 s2 := gset.NewSet() 160 s1.Add(1).Add(2).Add(3) 161 s2.Add(3).Add(4).Add(5) 162 s3 := s1.Intersect(s2) 163 gtest.Assert(s3.Contains(1), false) 164 gtest.Assert(s3.Contains(2), false) 165 gtest.Assert(s3.Contains(3), true) 166 gtest.Assert(s3.Contains(4), false) 167 }) 168 } 169 170 func TestSet_Complement(t *testing.T) { 171 gtest.Case(t, func() { 172 s1 := gset.NewSet() 173 s2 := gset.NewSet() 174 s1.Add(1).Add(2).Add(3) 175 s2.Add(3).Add(4).Add(5) 176 s3 := s1.Complement(s2) 177 gtest.Assert(s3.Contains(1), false) 178 gtest.Assert(s3.Contains(2), false) 179 gtest.Assert(s3.Contains(4), true) 180 gtest.Assert(s3.Contains(5), true) 181 }) 182 } 183 184 func TestNewFrom(t *testing.T) { 185 gtest.Case(t, func() { 186 s1 := gset.NewFrom("a") 187 s2 := gset.NewFrom("b", false) 188 s3 := gset.NewFrom(3, true) 189 s4 := gset.NewFrom([]string{"s1", "s2"}, true) 190 gtest.Assert(s1.Contains("a"), true) 191 gtest.Assert(s2.Contains("b"), true) 192 gtest.Assert(s3.Contains(3), true) 193 gtest.Assert(s4.Contains("s1"), true) 194 gtest.Assert(s4.Contains("s3"), false) 195 196 }) 197 } 198 199 func TestNew(t *testing.T) { 200 gtest.Case(t, func() { 201 s1 := gset.New() 202 s1.Add("a").Add(2) 203 s2 := gset.New(true) 204 s2.Add("b").Add(3) 205 gtest.Assert(s1.Contains("a"), true) 206 207 }) 208 } 209 210 func TestSet_Join(t *testing.T) { 211 gtest.Case(t, func() { 212 s1 := gset.New(true) 213 s1.Add("a").Add("a1").Add("b").Add("c") 214 str1 := s1.Join(",") 215 gtest.Assert(strings.Contains(str1, "a1"), true) 216 217 }) 218 } 219 220 func TestSet_String(t *testing.T) { 221 gtest.Case(t, func() { 222 s1 := gset.New(true) 223 s1.Add("a").Add("a2").Add("b").Add("c") 224 str1 := s1.String() 225 gtest.Assert(strings.Contains(str1, "a2"), true) 226 227 }) 228 } 229 230 func TestSet_Merge(t *testing.T) { 231 gtest.Case(t, func() { 232 s1 := gset.New(true) 233 s2 := gset.New(true) 234 s1.Add("a").Add("a2").Add("b").Add("c") 235 s2.Add("b").Add("b1").Add("e").Add("f") 236 ss := s1.Merge(s2) 237 gtest.Assert(ss.Contains("a2"), true) 238 gtest.Assert(ss.Contains("b1"), true) 239 240 }) 241 } 242 243 func TestSet_Sum(t *testing.T) { 244 gtest.Case(t, func() { 245 s1 := gset.New(true) 246 s1.Add(1).Add(2).Add(3).Add(4) 247 gtest.Assert(s1.Sum(), int(10)) 248 249 }) 250 } 251 252 func TestSet_Pop(t *testing.T) { 253 gtest.Case(t, func() { 254 s1 := gset.New(true) 255 s1.Add(1).Add(2).Add(3).Add(4) 256 gtest.AssertIN(s1.Pop(1), []int{1, 2, 3, 4}) 257 }) 258 } 259 260 func TestSet_Pops(t *testing.T) { 261 gtest.Case(t, func() { 262 s1 := gset.New(true) 263 s1.Add(1).Add(2).Add(3).Add(4) 264 gtest.AssertIN(s1.Pops(1), []int{1, 2, 3, 4}) 265 gtest.AssertIN(s1.Pops(6), []int{1, 2, 3, 4}) 266 gtest.Assert(len(s1.Pops(2)), 2) 267 }) 268 }