diff --git a/g/container/gset/gset_z_unit_int_test.go b/g/container/gset/gset_z_unit_int_test.go index 0570652ac..51e1b4a88 100644 --- a/g/container/gset/gset_z_unit_int_test.go +++ b/g/container/gset/gset_z_unit_int_test.go @@ -9,152 +9,194 @@ package gset_test import ( - "github.com/gogf/gf/g/container/garray" - "github.com/gogf/gf/g/container/gset" - "github.com/gogf/gf/g/test/gtest" - "testing" + "github.com/gogf/gf/g/container/garray" + "github.com/gogf/gf/g/container/gset" + "github.com/gogf/gf/g/test/gtest" + "strings" + "testing" ) func TestIntSet_Basic(t *testing.T) { - gtest.Case(t, func() { - s := gset.NewIntSet() - s.Add(1).Add(1).Add(2) - s.Add([]int{3,4}...) - gtest.Assert(s.Size(), 4) - gtest.AssertIN(1, s.Slice()) - gtest.AssertIN(2, s.Slice()) - gtest.AssertIN(3, s.Slice()) - gtest.AssertIN(4, s.Slice()) - gtest.AssertNI(0, s.Slice()) - gtest.Assert(s.Contains(4), true) - gtest.Assert(s.Contains(5), false) - s.Remove(1) - gtest.Assert(s.Size(), 3) - s.Clear() - gtest.Assert(s.Size(), 0) - }) + gtest.Case(t, func() { + s := gset.NewIntSet() + s.Add(1).Add(1).Add(2) + s.Add([]int{3, 4}...) + gtest.Assert(s.Size(), 4) + gtest.AssertIN(1, s.Slice()) + gtest.AssertIN(2, s.Slice()) + gtest.AssertIN(3, s.Slice()) + gtest.AssertIN(4, s.Slice()) + gtest.AssertNI(0, s.Slice()) + gtest.Assert(s.Contains(4), true) + gtest.Assert(s.Contains(5), false) + s.Remove(1) + gtest.Assert(s.Size(), 3) + s.Clear() + gtest.Assert(s.Size(), 0) + }) } func TestIntSet_Iterator(t *testing.T) { - gtest.Case(t, func() { - s := gset.NewIntSet() - s.Add(1).Add(2).Add(3) - gtest.Assert(s.Size(), 3) + gtest.Case(t, func() { + s := gset.NewIntSet() + s.Add(1).Add(2).Add(3) + gtest.Assert(s.Size(), 3) - a1 := garray.New() - a2 := garray.New() - s.Iterator(func(v int) bool { - a1.Append(1) - return false - }) - s.Iterator(func(v int) bool { - a2.Append(1) - return true - }) - gtest.Assert(a1.Len(), 1) - gtest.Assert(a2.Len(), 3) - }) + a1 := garray.New() + a2 := garray.New() + s.Iterator(func(v int) bool { + a1.Append(1) + return false + }) + s.Iterator(func(v int) bool { + a2.Append(1) + return true + }) + gtest.Assert(a1.Len(), 1) + gtest.Assert(a2.Len(), 3) + }) } func TestIntSet_LockFunc(t *testing.T) { - gtest.Case(t, func() { - s := gset.NewIntSet() - s.Add(1).Add(2).Add(3) - gtest.Assert(s.Size(), 3) - s.LockFunc(func(m map[int]struct{}) { - delete(m, 1) - }) - gtest.Assert(s.Size(), 2) - s.RLockFunc(func(m map[int]struct{}) { - gtest.Assert(m, map[int]struct{}{ - 3 : struct{}{}, - 2 : struct{}{}, - }) - }) - }) + gtest.Case(t, func() { + s := gset.NewIntSet() + s.Add(1).Add(2).Add(3) + gtest.Assert(s.Size(), 3) + s.LockFunc(func(m map[int]struct{}) { + delete(m, 1) + }) + gtest.Assert(s.Size(), 2) + s.RLockFunc(func(m map[int]struct{}) { + gtest.Assert(m, map[int]struct{}{ + 3: struct{}{}, + 2: struct{}{}, + }) + }) + }) } func TestIntSet_Equal(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewIntSet() - s2 := gset.NewIntSet() - s3 := gset.NewIntSet() - s1.Add(1).Add(2).Add(3) - s2.Add(1).Add(2).Add(3) - s3.Add(1).Add(2).Add(3).Add(4) - gtest.Assert(s1.Equal(s2), true) - gtest.Assert(s1.Equal(s3), false) - }) + gtest.Case(t, func() { + s1 := gset.NewIntSet() + s2 := gset.NewIntSet() + s3 := gset.NewIntSet() + s1.Add(1).Add(2).Add(3) + s2.Add(1).Add(2).Add(3) + s3.Add(1).Add(2).Add(3).Add(4) + gtest.Assert(s1.Equal(s2), true) + gtest.Assert(s1.Equal(s3), false) + }) } func TestIntSet_IsSubsetOf(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewIntSet() - s2 := gset.NewIntSet() - s3 := gset.NewIntSet() - s1.Add(1).Add(2) - s2.Add(1).Add(2).Add(3) - s3.Add(1).Add(2).Add(3).Add(4) - gtest.Assert(s1.IsSubsetOf(s2), true) - gtest.Assert(s2.IsSubsetOf(s3), true) - gtest.Assert(s1.IsSubsetOf(s3), true) - gtest.Assert(s2.IsSubsetOf(s1), false) - gtest.Assert(s3.IsSubsetOf(s2), false) - }) + gtest.Case(t, func() { + s1 := gset.NewIntSet() + s2 := gset.NewIntSet() + s3 := gset.NewIntSet() + s1.Add(1).Add(2) + s2.Add(1).Add(2).Add(3) + s3.Add(1).Add(2).Add(3).Add(4) + gtest.Assert(s1.IsSubsetOf(s2), true) + gtest.Assert(s2.IsSubsetOf(s3), true) + gtest.Assert(s1.IsSubsetOf(s3), true) + gtest.Assert(s2.IsSubsetOf(s1), false) + gtest.Assert(s3.IsSubsetOf(s2), false) + }) } func TestIntSet_Union(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewIntSet() - s2 := gset.NewIntSet() - s1.Add(1).Add(2) - s2.Add(3).Add(4) - s3 := s1.Union(s2) - gtest.Assert(s3.Contains(1), true) - gtest.Assert(s3.Contains(2), true) - gtest.Assert(s3.Contains(3), true) - gtest.Assert(s3.Contains(4), true) - }) + gtest.Case(t, func() { + s1 := gset.NewIntSet() + s2 := gset.NewIntSet() + s1.Add(1).Add(2) + s2.Add(3).Add(4) + s3 := s1.Union(s2) + gtest.Assert(s3.Contains(1), true) + gtest.Assert(s3.Contains(2), true) + gtest.Assert(s3.Contains(3), true) + gtest.Assert(s3.Contains(4), true) + }) } func TestIntSet_Diff(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewIntSet() - s2 := gset.NewIntSet() - s1.Add(1).Add(2).Add(3) - s2.Add(3).Add(4).Add(5) - s3 := s1.Diff(s2) - gtest.Assert(s3.Contains(1), true) - gtest.Assert(s3.Contains(2), true) - gtest.Assert(s3.Contains(3), false) - gtest.Assert(s3.Contains(4), false) - }) + gtest.Case(t, func() { + s1 := gset.NewIntSet() + s2 := gset.NewIntSet() + s1.Add(1).Add(2).Add(3) + s2.Add(3).Add(4).Add(5) + s3 := s1.Diff(s2) + gtest.Assert(s3.Contains(1), true) + gtest.Assert(s3.Contains(2), true) + gtest.Assert(s3.Contains(3), false) + gtest.Assert(s3.Contains(4), false) + }) } func TestIntSet_Intersect(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewIntSet() - s2 := gset.NewIntSet() - s1.Add(1).Add(2).Add(3) - s2.Add(3).Add(4).Add(5) - s3 := s1.Intersect(s2) - gtest.Assert(s3.Contains(1), false) - gtest.Assert(s3.Contains(2), false) - gtest.Assert(s3.Contains(3), true) - gtest.Assert(s3.Contains(4), false) - }) + gtest.Case(t, func() { + s1 := gset.NewIntSet() + s2 := gset.NewIntSet() + s1.Add(1).Add(2).Add(3) + s2.Add(3).Add(4).Add(5) + s3 := s1.Intersect(s2) + gtest.Assert(s3.Contains(1), false) + gtest.Assert(s3.Contains(2), false) + gtest.Assert(s3.Contains(3), true) + gtest.Assert(s3.Contains(4), false) + }) } func TestIntSet_Complement(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewIntSet() - s2 := gset.NewIntSet() - s1.Add(1).Add(2).Add(3) - s2.Add(3).Add(4).Add(5) - s3 := s1.Complement(s2) - gtest.Assert(s3.Contains(1), false) - gtest.Assert(s3.Contains(2), false) - gtest.Assert(s3.Contains(4), true) - gtest.Assert(s3.Contains(5), true) - }) -} \ No newline at end of file + gtest.Case(t, func() { + s1 := gset.NewIntSet() + s2 := gset.NewIntSet() + s1.Add(1).Add(2).Add(3) + s2.Add(3).Add(4).Add(5) + s3 := s1.Complement(s2) + gtest.Assert(s3.Contains(1), false) + gtest.Assert(s3.Contains(2), false) + gtest.Assert(s3.Contains(4), true) + gtest.Assert(s3.Contains(5), true) + }) +} + +func TestIntSet_Size(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.NewIntSet(true) + s1.Add(1).Add(2).Add(3) + gtest.Assert(s1.Size(), 3) + + }) + +} + +func TestIntSet_Merge(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.NewIntSet() + s2 := gset.NewIntSet() + s1.Add(1).Add(2).Add(3) + s2.Add(3).Add(4).Add(5) + s3 := s1.Merge(s2) + gtest.Assert(s3.Contains(1), true) + gtest.Assert(s3.Contains(5), true) + gtest.Assert(s3.Contains(6), false) + }) +} + +func TestIntSet_Join(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.NewIntSet() + s1.Add(1).Add(2).Add(3) + s3 := s1.Join(",") + gtest.Assert(strings.Contains(s3, "3"), true) + + }) +} + +func TestIntSet_Sum(t *testing.T) { + s1 := gset.NewIntSet() + s1.Add(1).Add(2).Add(3) + s2 := gset.NewIntSet() + s2.Add(5).Add(6).Add(7) + gtest.Assert(s2.Sum(), 18) +} diff --git a/g/container/gset/gset_z_unit_string_test.go b/g/container/gset/gset_z_unit_string_test.go index 67a2dadfe..10ab0251c 100644 --- a/g/container/gset/gset_z_unit_string_test.go +++ b/g/container/gset/gset_z_unit_string_test.go @@ -9,152 +9,186 @@ package gset_test import ( - "github.com/gogf/gf/g/container/garray" - "github.com/gogf/gf/g/container/gset" - "github.com/gogf/gf/g/test/gtest" - "testing" + "github.com/gogf/gf/g/container/garray" + "github.com/gogf/gf/g/container/gset" + "github.com/gogf/gf/g/test/gtest" + "testing" ) func TestStringSet_Basic(t *testing.T) { - gtest.Case(t, func() { - s := gset.NewStringSet() - s.Add("1").Add("1").Add("2") - s.Add([]string{"3","4"}...) - gtest.Assert(s.Size(), 4) - gtest.AssertIN("1", s.Slice()) - gtest.AssertIN("2", s.Slice()) - gtest.AssertIN("3", s.Slice()) - gtest.AssertIN("4", s.Slice()) - gtest.AssertNI("0", s.Slice()) - gtest.Assert(s.Contains("4"), true) - gtest.Assert(s.Contains("5"), false) - s.Remove("1") - gtest.Assert(s.Size(), 3) - s.Clear() - gtest.Assert(s.Size(), 0) - }) + gtest.Case(t, func() { + s := gset.NewStringSet() + s.Add("1").Add("1").Add("2") + s.Add([]string{"3", "4"}...) + gtest.Assert(s.Size(), 4) + gtest.AssertIN("1", s.Slice()) + gtest.AssertIN("2", s.Slice()) + gtest.AssertIN("3", s.Slice()) + gtest.AssertIN("4", s.Slice()) + gtest.AssertNI("0", s.Slice()) + gtest.Assert(s.Contains("4"), true) + gtest.Assert(s.Contains("5"), false) + s.Remove("1") + gtest.Assert(s.Size(), 3) + s.Clear() + gtest.Assert(s.Size(), 0) + }) } func TestStringSet_Iterator(t *testing.T) { - gtest.Case(t, func() { - s := gset.NewStringSet() - s.Add("1").Add("2").Add("3") - gtest.Assert(s.Size(), 3) + gtest.Case(t, func() { + s := gset.NewStringSet() + s.Add("1").Add("2").Add("3") + gtest.Assert(s.Size(), 3) - a1 := garray.New() - a2 := garray.New() - s.Iterator(func(v string) bool { - a1.Append("1") - return false - }) - s.Iterator(func(v string) bool { - a2.Append("1") - return true - }) - gtest.Assert(a1.Len(), 1) - gtest.Assert(a2.Len(), 3) - }) + a1 := garray.New() + a2 := garray.New() + s.Iterator(func(v string) bool { + a1.Append("1") + return false + }) + s.Iterator(func(v string) bool { + a2.Append("1") + return true + }) + gtest.Assert(a1.Len(), 1) + gtest.Assert(a2.Len(), 3) + }) } func TestStringSet_LockFunc(t *testing.T) { - gtest.Case(t, func() { - s := gset.NewStringSet() - s.Add("1").Add("2").Add("3") - gtest.Assert(s.Size(), 3) - s.LockFunc(func(m map[string]struct{}) { - delete(m, "1") - }) - gtest.Assert(s.Size(), 2) - s.RLockFunc(func(m map[string]struct{}) { - gtest.Assert(m, map[string]struct{}{ - "3" : struct{}{}, - "2" : struct{}{}, - }) - }) - }) + gtest.Case(t, func() { + s := gset.NewStringSet() + s.Add("1").Add("2").Add("3") + gtest.Assert(s.Size(), 3) + s.LockFunc(func(m map[string]struct{}) { + delete(m, "1") + }) + gtest.Assert(s.Size(), 2) + s.RLockFunc(func(m map[string]struct{}) { + gtest.Assert(m, map[string]struct{}{ + "3": struct{}{}, + "2": struct{}{}, + }) + }) + }) } func TestStringSet_Equal(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewStringSet() - s2 := gset.NewStringSet() - s3 := gset.NewStringSet() - s1.Add("1").Add("2").Add("3") - s2.Add("1").Add("2").Add("3") - s3.Add("1").Add("2").Add("3").Add("4") - gtest.Assert(s1.Equal(s2), true) - gtest.Assert(s1.Equal(s3), false) - }) + gtest.Case(t, func() { + s1 := gset.NewStringSet() + s2 := gset.NewStringSet() + s3 := gset.NewStringSet() + s1.Add("1").Add("2").Add("3") + s2.Add("1").Add("2").Add("3") + s3.Add("1").Add("2").Add("3").Add("4") + gtest.Assert(s1.Equal(s2), true) + gtest.Assert(s1.Equal(s3), false) + }) } func TestStringSet_IsSubsetOf(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewStringSet() - s2 := gset.NewStringSet() - s3 := gset.NewStringSet() - s1.Add("1").Add("2") - s2.Add("1").Add("2").Add("3") - s3.Add("1").Add("2").Add("3").Add("4") - gtest.Assert(s1.IsSubsetOf(s2), true) - gtest.Assert(s2.IsSubsetOf(s3), true) - gtest.Assert(s1.IsSubsetOf(s3), true) - gtest.Assert(s2.IsSubsetOf(s1), false) - gtest.Assert(s3.IsSubsetOf(s2), false) - }) + gtest.Case(t, func() { + s1 := gset.NewStringSet() + s2 := gset.NewStringSet() + s3 := gset.NewStringSet() + s1.Add("1").Add("2") + s2.Add("1").Add("2").Add("3") + s3.Add("1").Add("2").Add("3").Add("4") + gtest.Assert(s1.IsSubsetOf(s2), true) + gtest.Assert(s2.IsSubsetOf(s3), true) + gtest.Assert(s1.IsSubsetOf(s3), true) + gtest.Assert(s2.IsSubsetOf(s1), false) + gtest.Assert(s3.IsSubsetOf(s2), false) + }) } func TestStringSet_Union(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewStringSet() - s2 := gset.NewStringSet() - s1.Add("1").Add("2") - s2.Add("3").Add("4") - s3 := s1.Union(s2) - gtest.Assert(s3.Contains("1"), true) - gtest.Assert(s3.Contains("2"), true) - gtest.Assert(s3.Contains("3"), true) - gtest.Assert(s3.Contains("4"), true) - }) + gtest.Case(t, func() { + s1 := gset.NewStringSet() + s2 := gset.NewStringSet() + s1.Add("1").Add("2") + s2.Add("3").Add("4") + s3 := s1.Union(s2) + gtest.Assert(s3.Contains("1"), true) + gtest.Assert(s3.Contains("2"), true) + gtest.Assert(s3.Contains("3"), true) + gtest.Assert(s3.Contains("4"), true) + }) } func TestStringSet_Diff(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewStringSet() - s2 := gset.NewStringSet() - s1.Add("1").Add("2").Add("3") - s2.Add("3").Add("4").Add("5") - s3 := s1.Diff(s2) - gtest.Assert(s3.Contains("1"), true) - gtest.Assert(s3.Contains("2"), true) - gtest.Assert(s3.Contains("3"), false) - gtest.Assert(s3.Contains("4"), false) - }) + gtest.Case(t, func() { + s1 := gset.NewStringSet() + s2 := gset.NewStringSet() + s1.Add("1").Add("2").Add("3") + s2.Add("3").Add("4").Add("5") + s3 := s1.Diff(s2) + gtest.Assert(s3.Contains("1"), true) + gtest.Assert(s3.Contains("2"), true) + gtest.Assert(s3.Contains("3"), false) + gtest.Assert(s3.Contains("4"), false) + }) } func TestStringSet_Intersect(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewStringSet() - s2 := gset.NewStringSet() - s1.Add("1").Add("2").Add("3") - s2.Add("3").Add("4").Add("5") - s3 := s1.Intersect(s2) - gtest.Assert(s3.Contains("1"), false) - gtest.Assert(s3.Contains("2"), false) - gtest.Assert(s3.Contains("3"), true) - gtest.Assert(s3.Contains("4"), false) - }) + gtest.Case(t, func() { + s1 := gset.NewStringSet() + s2 := gset.NewStringSet() + s1.Add("1").Add("2").Add("3") + s2.Add("3").Add("4").Add("5") + s3 := s1.Intersect(s2) + gtest.Assert(s3.Contains("1"), false) + gtest.Assert(s3.Contains("2"), false) + gtest.Assert(s3.Contains("3"), true) + gtest.Assert(s3.Contains("4"), false) + }) } func TestStringSet_Complement(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewStringSet() - s2 := gset.NewStringSet() - s1.Add("1").Add("2").Add("3") - s2.Add("3").Add("4").Add("5") - s3 := s1.Complement(s2) - gtest.Assert(s3.Contains("1"), false) - gtest.Assert(s3.Contains("2"), false) - gtest.Assert(s3.Contains("4"), true) - gtest.Assert(s3.Contains("5"), true) - }) -} \ No newline at end of file + gtest.Case(t, func() { + s1 := gset.NewStringSet() + s2 := gset.NewStringSet() + s1.Add("1").Add("2").Add("3") + s2.Add("3").Add("4").Add("5") + s3 := s1.Complement(s2) + gtest.Assert(s3.Contains("1"), false) + gtest.Assert(s3.Contains("2"), false) + gtest.Assert(s3.Contains("4"), true) + gtest.Assert(s3.Contains("5"), true) + }) +} + +func TestNewIntSetFrom(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.NewIntSetFrom([]int{1, 2, 3, 4}) + s2 := gset.NewIntSetFrom([]int{5, 6, 7, 8}) + gtest.Assert(s1.Contains(3), true) + gtest.Assert(s1.Contains(5), false) + gtest.Assert(s2.Contains(3), false) + gtest.Assert(s2.Contains(5), true) + }) +} + +func TestStringSet_Merge(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.NewStringSet() + s2 := gset.NewStringSet() + s1.Add("1").Add("2").Add("3") + s2.Add("3").Add("4").Add("5") + s3 := s1.Merge(s2) + gtest.Assert(s3.Contains("1"), true) + gtest.Assert(s3.Contains("6"), false) + gtest.Assert(s3.Contains("4"), true) + gtest.Assert(s3.Contains("5"), true) + }) +} + +func TestNewStringSetFrom(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.NewStringSetFrom([]string{"a", "b", "c"}, true) + gtest.Assert(s1.Contains("b"), true) + gtest.Assert(s1.Contains("d"), false) + + }) +} diff --git a/g/container/gset/gset_z_unit_test.go b/g/container/gset/gset_z_unit_test.go index a0901a070..527257ba4 100644 --- a/g/container/gset/gset_z_unit_test.go +++ b/g/container/gset/gset_z_unit_test.go @@ -9,152 +9,230 @@ package gset_test import ( - "github.com/gogf/gf/g/container/garray" - "github.com/gogf/gf/g/container/gset" - "github.com/gogf/gf/g/test/gtest" - "testing" + "github.com/gogf/gf/g/container/garray" + "github.com/gogf/gf/g/container/gset" + + "github.com/gogf/gf/g/test/gtest" + "strings" + "testing" ) func TestSet_Basic(t *testing.T) { - gtest.Case(t, func() { - s := gset.NewSet() - s.Add(1).Add(1).Add(2) - s.Add([]interface{}{3,4}...) - gtest.Assert(s.Size(), 4) - gtest.AssertIN(1, s.Slice()) - gtest.AssertIN(2, s.Slice()) - gtest.AssertIN(3, s.Slice()) - gtest.AssertIN(4, s.Slice()) - gtest.AssertNI(0, s.Slice()) - gtest.Assert(s.Contains(4), true) - gtest.Assert(s.Contains(5), false) - s.Remove(1) - gtest.Assert(s.Size(), 3) - s.Clear() - gtest.Assert(s.Size(), 0) - }) + gtest.Case(t, func() { + s := gset.NewSet() + s.Add(1).Add(1).Add(2) + s.Add([]interface{}{3, 4}...) + gtest.Assert(s.Size(), 4) + gtest.AssertIN(1, s.Slice()) + gtest.AssertIN(2, s.Slice()) + gtest.AssertIN(3, s.Slice()) + gtest.AssertIN(4, s.Slice()) + gtest.AssertNI(0, s.Slice()) + gtest.Assert(s.Contains(4), true) + gtest.Assert(s.Contains(5), false) + s.Remove(1) + gtest.Assert(s.Size(), 3) + s.Clear() + gtest.Assert(s.Size(), 0) + }) } func TestSet_Iterator(t *testing.T) { - gtest.Case(t, func() { - s := gset.NewSet() - s.Add(1).Add(2).Add(3) - gtest.Assert(s.Size(), 3) + gtest.Case(t, func() { + s := gset.NewSet() + s.Add(1).Add(2).Add(3) + gtest.Assert(s.Size(), 3) - a1 := garray.New() - a2 := garray.New() - s.Iterator(func(v interface{}) bool { - a1.Append(1) - return false - }) - s.Iterator(func(v interface{}) bool { - a2.Append(1) - return true - }) - gtest.Assert(a1.Len(), 1) - gtest.Assert(a2.Len(), 3) - }) + a1 := garray.New() + a2 := garray.New() + s.Iterator(func(v interface{}) bool { + a1.Append(1) + return false + }) + s.Iterator(func(v interface{}) bool { + a2.Append(1) + return true + }) + gtest.Assert(a1.Len(), 1) + gtest.Assert(a2.Len(), 3) + }) } func TestSet_LockFunc(t *testing.T) { - gtest.Case(t, func() { - s := gset.NewSet() - s.Add(1).Add(2).Add(3) - gtest.Assert(s.Size(), 3) - s.LockFunc(func(m map[interface{}]struct{}) { - delete(m, 1) - }) - gtest.Assert(s.Size(), 2) - s.RLockFunc(func(m map[interface{}]struct{}) { - gtest.Assert(m, map[interface{}]struct{}{ - 3 : struct{}{}, - 2 : struct{}{}, - }) - }) - }) + gtest.Case(t, func() { + s := gset.NewSet() + s.Add(1).Add(2).Add(3) + gtest.Assert(s.Size(), 3) + s.LockFunc(func(m map[interface{}]struct{}) { + delete(m, 1) + }) + gtest.Assert(s.Size(), 2) + s.RLockFunc(func(m map[interface{}]struct{}) { + gtest.Assert(m, map[interface{}]struct{}{ + 3: struct{}{}, + 2: struct{}{}, + }) + }) + }) } func TestSet_Equal(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewSet() - s2 := gset.NewSet() - s3 := gset.NewSet() - s1.Add(1).Add(2).Add(3) - s2.Add(1).Add(2).Add(3) - s3.Add(1).Add(2).Add(3).Add(4) - gtest.Assert(s1.Equal(s2), true) - gtest.Assert(s1.Equal(s3), false) - }) + gtest.Case(t, func() { + s1 := gset.NewSet() + s2 := gset.NewSet() + s3 := gset.NewSet() + s1.Add(1).Add(2).Add(3) + s2.Add(1).Add(2).Add(3) + s3.Add(1).Add(2).Add(3).Add(4) + gtest.Assert(s1.Equal(s2), true) + gtest.Assert(s1.Equal(s3), false) + }) } func TestSet_IsSubsetOf(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewSet() - s2 := gset.NewSet() - s3 := gset.NewSet() - s1.Add(1).Add(2) - s2.Add(1).Add(2).Add(3) - s3.Add(1).Add(2).Add(3).Add(4) - gtest.Assert(s1.IsSubsetOf(s2), true) - gtest.Assert(s2.IsSubsetOf(s3), true) - gtest.Assert(s1.IsSubsetOf(s3), true) - gtest.Assert(s2.IsSubsetOf(s1), false) - gtest.Assert(s3.IsSubsetOf(s2), false) - }) + gtest.Case(t, func() { + s1 := gset.NewSet() + s2 := gset.NewSet() + s3 := gset.NewSet() + s1.Add(1).Add(2) + s2.Add(1).Add(2).Add(3) + s3.Add(1).Add(2).Add(3).Add(4) + gtest.Assert(s1.IsSubsetOf(s2), true) + gtest.Assert(s2.IsSubsetOf(s3), true) + gtest.Assert(s1.IsSubsetOf(s3), true) + gtest.Assert(s2.IsSubsetOf(s1), false) + gtest.Assert(s3.IsSubsetOf(s2), false) + }) } func TestSet_Union(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewSet() - s2 := gset.NewSet() - s1.Add(1).Add(2) - s2.Add(3).Add(4) - s3 := s1.Union(s2) - gtest.Assert(s3.Contains(1), true) - gtest.Assert(s3.Contains(2), true) - gtest.Assert(s3.Contains(3), true) - gtest.Assert(s3.Contains(4), true) - }) + gtest.Case(t, func() { + s1 := gset.NewSet() + s2 := gset.NewSet() + s1.Add(1).Add(2) + s2.Add(3).Add(4) + s3 := s1.Union(s2) + gtest.Assert(s3.Contains(1), true) + gtest.Assert(s3.Contains(2), true) + gtest.Assert(s3.Contains(3), true) + gtest.Assert(s3.Contains(4), true) + }) } func TestSet_Diff(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewSet() - s2 := gset.NewSet() - s1.Add(1).Add(2).Add(3) - s2.Add(3).Add(4).Add(5) - s3 := s1.Diff(s2) - gtest.Assert(s3.Contains(1), true) - gtest.Assert(s3.Contains(2), true) - gtest.Assert(s3.Contains(3), false) - gtest.Assert(s3.Contains(4), false) - }) + gtest.Case(t, func() { + s1 := gset.NewSet() + s2 := gset.NewSet() + s1.Add(1).Add(2).Add(3) + s2.Add(3).Add(4).Add(5) + s3 := s1.Diff(s2) + gtest.Assert(s3.Contains(1), true) + gtest.Assert(s3.Contains(2), true) + gtest.Assert(s3.Contains(3), false) + gtest.Assert(s3.Contains(4), false) + }) } func TestSet_Intersect(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewSet() - s2 := gset.NewSet() - s1.Add(1).Add(2).Add(3) - s2.Add(3).Add(4).Add(5) - s3 := s1.Intersect(s2) - gtest.Assert(s3.Contains(1), false) - gtest.Assert(s3.Contains(2), false) - gtest.Assert(s3.Contains(3), true) - gtest.Assert(s3.Contains(4), false) - }) + gtest.Case(t, func() { + s1 := gset.NewSet() + s2 := gset.NewSet() + s1.Add(1).Add(2).Add(3) + s2.Add(3).Add(4).Add(5) + s3 := s1.Intersect(s2) + gtest.Assert(s3.Contains(1), false) + gtest.Assert(s3.Contains(2), false) + gtest.Assert(s3.Contains(3), true) + gtest.Assert(s3.Contains(4), false) + }) } func TestSet_Complement(t *testing.T) { - gtest.Case(t, func() { - s1 := gset.NewSet() - s2 := gset.NewSet() - s1.Add(1).Add(2).Add(3) - s2.Add(3).Add(4).Add(5) - s3 := s1.Complement(s2) - gtest.Assert(s3.Contains(1), false) - gtest.Assert(s3.Contains(2), false) - gtest.Assert(s3.Contains(4), true) - gtest.Assert(s3.Contains(5), true) - }) -} \ No newline at end of file + gtest.Case(t, func() { + s1 := gset.NewSet() + s2 := gset.NewSet() + s1.Add(1).Add(2).Add(3) + s2.Add(3).Add(4).Add(5) + s3 := s1.Complement(s2) + gtest.Assert(s3.Contains(1), false) + gtest.Assert(s3.Contains(2), false) + gtest.Assert(s3.Contains(4), true) + gtest.Assert(s3.Contains(5), true) + }) +} + +func TestNewFrom(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.NewFrom("a") + s2 := gset.NewFrom("b", false) + s3 := gset.NewFrom(3, true) + s4 := gset.NewFrom([]string{"s1", "s2"}, true) + gtest.Assert(s1.Contains("a"), true) + gtest.Assert(s2.Contains("b"), true) + gtest.Assert(s3.Contains(3), true) + gtest.Assert(s4.Contains("s1"), true) + gtest.Assert(s4.Contains("s3"), false) + + }) +} + +func TestNew(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.New() + s1.Add("a").Add(2) + s2 := gset.New(true) + s2.Add("b").Add(3) + gtest.Assert(s1.Contains("a"), true) + + }) +} + +func TestSet_Join(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.New(true) + s1.Add("a").Add("a1").Add("b").Add("c") + str1 := s1.Join(",") + gtest.Assert(strings.Contains(str1, "a1"), true) + + }) +} + +func TestSet_String(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.New(true) + s1.Add("a").Add("a2").Add("b").Add("c") + str1 := s1.String() + gtest.Assert(strings.Contains(str1, "a2"), true) + + }) +} + +func TestSet_Merge(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.New(true) + s2 := gset.New(true) + s1.Add("a").Add("a2").Add("b").Add("c") + s2.Add("b").Add("b1").Add("e").Add("f") + ss := s1.Merge(s2) + gtest.Assert(ss.Contains("a2"), true) + gtest.Assert(ss.Contains("b1"), true) + + }) +} + +func TestSet_Sum(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.New(true) + s1.Add(1).Add(2).Add(3).Add(4) + gtest.Assert(s1.Sum(), int(10)) + + }) +} + +func TestSet_Pop(t *testing.T) { + gtest.Case(t, func() { + s1 := gset.New(true) + s1.Add(1).Add(2).Add(3).Add(4) + gtest.AssertIN(s1.Pop(1), []int{1, 2, 3, 4}) + }) +}