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 }