github.com/lyft/flytestdlib@v0.3.12-0.20210213045714-8cdd111ecda1/sets/generic_set_test.go (about)

     1  package sets
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  type GenericVal string
    10  
    11  func (g GenericVal) GetID() string {
    12  	return string(g)
    13  }
    14  
    15  func TestGenericSet(t *testing.T) {
    16  	assert.Equal(t, []string{"a", "b"}, NewGeneric(GenericVal("a"), GenericVal("b")).ListKeys())
    17  	assert.Equal(t, []string{"a", "b"}, NewGeneric(GenericVal("a"), GenericVal("b"), GenericVal("a")).ListKeys())
    18  
    19  	{
    20  		g1 := NewGeneric(GenericVal("a"), GenericVal("b"))
    21  		g2 := NewGeneric(GenericVal("a"), GenericVal("b"), GenericVal("c"))
    22  		{
    23  			g := g1.Intersection(g2)
    24  			assert.Equal(t, []string{"a", "b"}, g.ListKeys())
    25  		}
    26  		{
    27  			g := g2.Intersection(g1)
    28  			assert.Equal(t, []string{"a", "b"}, g.ListKeys())
    29  		}
    30  	}
    31  	{
    32  		g1 := NewGeneric(GenericVal("a"), GenericVal("b"))
    33  		g2 := NewGeneric(GenericVal("a"), GenericVal("b"), GenericVal("c"))
    34  		g := g2.Difference(g1)
    35  		assert.Equal(t, []string{"c"}, g.ListKeys())
    36  	}
    37  	{
    38  		g1 := NewGeneric(GenericVal("a"), GenericVal("b"))
    39  		g2 := NewGeneric(GenericVal("a"), GenericVal("b"), GenericVal("c"))
    40  		g := g1.Difference(g2)
    41  		assert.Equal(t, []string{}, g.ListKeys())
    42  	}
    43  	{
    44  		g1 := NewGeneric(GenericVal("a"), GenericVal("b"))
    45  		assert.True(t, g1.Has(GenericVal("a")))
    46  		assert.False(t, g1.Has(GenericVal("c")))
    47  	}
    48  	{
    49  		g1 := NewGeneric(GenericVal("a"), GenericVal("b"))
    50  		assert.False(t, g1.HasAll(GenericVal("a"), GenericVal("b"), GenericVal("c")))
    51  		assert.True(t, g1.HasAll(GenericVal("a"), GenericVal("b")))
    52  	}
    53  
    54  	{
    55  		g1 := NewGeneric(GenericVal("a"), GenericVal("b"))
    56  		g2 := NewGeneric(GenericVal("a"), GenericVal("b"), GenericVal("c"))
    57  		g := g1.Union(g2)
    58  		assert.Equal(t, []string{"a", "b", "c"}, g.ListKeys())
    59  	}
    60  
    61  	{
    62  		g1 := NewGeneric(GenericVal("a"), GenericVal("b"))
    63  		g2 := NewGeneric(GenericVal("a"), GenericVal("b"), GenericVal("c"))
    64  		assert.True(t, g2.IsSuperset(g1))
    65  		assert.False(t, g1.IsSuperset(g2))
    66  	}
    67  
    68  	{
    69  		g1 := NewGeneric(GenericVal("a"), GenericVal("b"))
    70  		assert.True(t, g1.Has(GenericVal("a")))
    71  		assert.False(t, g1.Has(GenericVal("c")))
    72  		assert.Equal(t, []SetObject{
    73  			GenericVal("a"),
    74  			GenericVal("b"),
    75  		}, g1.List())
    76  		g2 := NewGeneric(g1.UnsortedList()...)
    77  		assert.True(t, g1.Equal(g2))
    78  	}
    79  	{
    80  		g1 := NewGeneric(GenericVal("a"), GenericVal("b"))
    81  		g2 := NewGeneric(GenericVal("a"), GenericVal("b"), GenericVal("c"))
    82  		g3 := NewGeneric(GenericVal("a"), GenericVal("b"))
    83  		assert.False(t, g1.Equal(g2))
    84  		assert.True(t, g1.Equal(g3))
    85  
    86  		assert.Equal(t, 2, g1.Len())
    87  		g1.Insert(GenericVal("b"))
    88  		assert.Equal(t, 2, g1.Len())
    89  		assert.True(t, g1.Equal(g3))
    90  		g1.Insert(GenericVal("c"))
    91  		assert.Equal(t, 3, g1.Len())
    92  		assert.True(t, g1.Equal(g2))
    93  		assert.True(t, g1.HasAny(GenericVal("a"), GenericVal("d")))
    94  		assert.False(t, g1.HasAny(GenericVal("f"), GenericVal("d")))
    95  		g1.Delete(GenericVal("f"))
    96  		assert.True(t, g1.Equal(g2))
    97  		g1.Delete(GenericVal("c"))
    98  		assert.True(t, g1.Equal(g3))
    99  
   100  		{
   101  			p, ok := g1.PopAny()
   102  			assert.NotNil(t, p)
   103  			assert.True(t, ok)
   104  		}
   105  		{
   106  			p, ok := g1.PopAny()
   107  			assert.NotNil(t, p)
   108  			assert.True(t, ok)
   109  		}
   110  		{
   111  			p, ok := g1.PopAny()
   112  			assert.Nil(t, p)
   113  			assert.False(t, ok)
   114  		}
   115  	}
   116  }