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  }