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  }