github.com/cilium/statedb@v0.3.2/part/set_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package part_test 5 6 import ( 7 "encoding/json" 8 "slices" 9 "testing" 10 11 "github.com/cilium/statedb/part" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 "gopkg.in/yaml.v3" 15 ) 16 17 func TestStringSet(t *testing.T) { 18 var s part.Set[string] 19 20 assert.False(t, s.Has("nothing"), "Has nothing") 21 22 s = s.Set("foo") 23 assert.True(t, s.Has("foo"), "Has foo") 24 25 count := 0 26 for v := range s.All() { 27 assert.Equal(t, "foo", v) 28 count++ 29 } 30 assert.Equal(t, 1, count) 31 32 s2 := part.NewSet("bar") 33 34 s3 := s.Union(s2) 35 assert.False(t, s.Has("bar"), "s has no bar") 36 assert.False(t, s2.Has("foo"), "s2 has no foo") 37 assert.True(t, s3.Has("foo"), "s3 has foo") 38 assert.True(t, s3.Has("bar"), "s3 has bar") 39 40 values := slices.Collect(s3.All()) 41 assert.ElementsMatch(t, []string{"foo", "bar"}, values) 42 43 s4 := s3.Difference(s2) 44 assert.False(t, s4.Has("bar"), "s4 has no bar") 45 assert.True(t, s4.Has("foo"), "s4 has foo") 46 47 assert.Equal(t, 2, s3.Len()) 48 49 s5 := s3.Delete("foo") 50 assert.True(t, s3.Has("foo"), "s3 has foo") 51 assert.False(t, s5.Has("foo"), "s3 has no foo") 52 53 // Deleting again does the same. 54 s5 = s3.Delete("foo") 55 assert.False(t, s5.Has("foo"), "s3 has no foo") 56 57 assert.Equal(t, 2, s3.Len()) 58 assert.Equal(t, 1, s5.Len()) 59 } 60 61 func TestSetJSON(t *testing.T) { 62 s := part.NewSet("foo", "bar", "baz") 63 64 bs, err := json.Marshal(s) 65 require.NoError(t, err, "Marshal") 66 67 var s2 part.Set[string] 68 err = json.Unmarshal(bs, &s2) 69 require.NoError(t, err, "Unmarshal") 70 require.True(t, s.Equal(s2), "Equal") 71 } 72 73 func TestSetYAML(t *testing.T) { 74 s := part.NewSet("foo", "bar", "baz") 75 76 bs, err := yaml.Marshal(s) 77 require.NoError(t, err, "Marshal") 78 79 var s2 part.Set[string] 80 err = yaml.Unmarshal(bs, &s2) 81 require.NoError(t, err, "Unmarshal") 82 require.True(t, s.Equal(s2), "Equal") 83 }