github.com/MetalBlockchain/metalgo@v1.11.9/utils/bag/unique_bag_test.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package bag
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/MetalBlockchain/metalgo/utils/set"
    12  )
    13  
    14  func TestUniqueBag(t *testing.T) {
    15  	require := require.New(t)
    16  
    17  	var ub1 UniqueBag[int]
    18  	ub1.init()
    19  	require.NotNil(ub1)
    20  	require.Empty(ub1)
    21  
    22  	elt1 := 1
    23  	elt2 := 2
    24  
    25  	ub2 := make(UniqueBag[int])
    26  	ub2.Add(1, elt1, elt2)
    27  	require.True(ub2.GetSet(elt1).Contains(1))
    28  	require.True(ub2.GetSet(elt2).Contains(1))
    29  
    30  	var bs1 set.Bits64
    31  	bs1.Add(2)
    32  	bs1.Add(4)
    33  
    34  	ub3 := make(UniqueBag[int])
    35  
    36  	ub3.UnionSet(elt1, bs1)
    37  
    38  	bs1.Clear()
    39  	bs1 = ub3.GetSet(elt1)
    40  	require.Equal(2, bs1.Len())
    41  	require.True(bs1.Contains(2))
    42  	require.True(bs1.Contains(4))
    43  
    44  	// Difference test
    45  	bs1.Clear()
    46  
    47  	ub4 := make(UniqueBag[int])
    48  	ub4.Add(1, elt1)
    49  	ub4.Add(2, elt1)
    50  	ub4.Add(5, elt2)
    51  	ub4.Add(8, elt2)
    52  
    53  	ub5 := make(UniqueBag[int])
    54  	ub5.Add(5, elt2)
    55  	ub5.Add(5, elt1)
    56  	require.Len(ub5.List(), 2)
    57  
    58  	ub4.Difference(&ub5)
    59  
    60  	ub4elt1 := ub4.GetSet(elt1)
    61  	require.Equal(2, ub4elt1.Len())
    62  	require.True(ub4elt1.Contains(1))
    63  	require.True(ub4elt1.Contains(2))
    64  
    65  	ub4elt2 := ub4.GetSet(elt2)
    66  	require.Equal(1, ub4elt2.Len())
    67  	require.True(ub4elt2.Contains(8))
    68  
    69  	// DifferenceSet test
    70  
    71  	ub6 := make(UniqueBag[int])
    72  	ub6.Add(1, elt1)
    73  	ub6.Add(2, elt1)
    74  	ub6.Add(7, elt1)
    75  
    76  	diffBitSet := set.Bits64(0)
    77  	diffBitSet.Add(1)
    78  	diffBitSet.Add(7)
    79  
    80  	ub6.DifferenceSet(elt1, diffBitSet)
    81  
    82  	ub6elt1 := ub6.GetSet(elt1)
    83  	require.Equal(1, ub6elt1.Len())
    84  	require.True(ub6elt1.Contains(2))
    85  }
    86  
    87  func TestUniqueBagClear(t *testing.T) {
    88  	require := require.New(t)
    89  
    90  	b := UniqueBag[int]{}
    91  	elt1, elt2 := 0, 1
    92  	b.Add(0, elt1)
    93  	b.Add(1, elt1, elt2)
    94  
    95  	b.Clear()
    96  	require.Empty(b.List())
    97  
    98  	bs := b.GetSet(elt1)
    99  	require.Zero(bs.Len())
   100  
   101  	bs = b.GetSet(elt2)
   102  	require.Zero(bs.Len())
   103  }