github.com/filecoin-project/specs-actors/v4@v4.0.2/actors/util/bitfield_test.go (about) 1 package util_test 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/filecoin-project/go-bitfield" 8 "github.com/stretchr/testify/assert" 9 10 "github.com/filecoin-project/specs-actors/v4/actors/util" 11 ) 12 13 func TestBitFieldUnset(t *testing.T) { 14 bf := bitfield.New() 15 bf.Set(1) 16 bf.Set(2) 17 bf.Set(3) 18 bf.Set(4) 19 bf.Set(5) 20 21 bf.Unset(3) 22 23 m, err := bf.AllMap(100) 24 assert.NoError(t, err) 25 _, found := m[3] 26 assert.False(t, found) 27 28 cnt, err := bf.Count() 29 assert.NoError(t, err) 30 assert.Equal(t, uint64(4), cnt) 31 32 bf2 := roundtripMarshal(t, bf) 33 34 cnt, err = bf2.Count() 35 assert.NoError(t, err) 36 assert.Equal(t, uint64(4), cnt) 37 38 m, err = bf.AllMap(100) 39 assert.NoError(t, err) 40 _, found = m[3] 41 assert.False(t, found) 42 } 43 44 func roundtripMarshal(t *testing.T, in bitfield.BitField) bitfield.BitField { 45 buf := new(bytes.Buffer) 46 err := in.MarshalCBOR(buf) 47 assert.NoError(t, err) 48 49 bf2 := bitfield.New() 50 err = bf2.UnmarshalCBOR(buf) 51 assert.NoError(t, err) 52 return bf2 53 } 54 55 func TestBitFieldContains(t *testing.T) { 56 a := bitfield.New() 57 a.Set(2) 58 a.Set(4) 59 a.Set(5) 60 61 b := bitfield.New() 62 b.Set(3) 63 b.Set(4) 64 65 c := bitfield.New() 66 c.Set(2) 67 c.Set(5) 68 69 assertContainsAny := func(a, b bitfield.BitField, expected bool) { 70 t.Helper() 71 actual, err := util.BitFieldContainsAny(a, b) 72 assert.NoError(t, err) 73 assert.Equal(t, expected, actual) 74 } 75 76 assertContainsAll := func(a, b bitfield.BitField, expected bool) { 77 t.Helper() 78 actual, err := util.BitFieldContainsAll(a, b) 79 assert.NoError(t, err) 80 assert.Equal(t, expected, actual) 81 } 82 83 assertContainsAny(a, b, true) 84 assertContainsAny(b, a, true) 85 assertContainsAny(a, c, true) 86 assertContainsAny(c, a, true) 87 assertContainsAny(b, c, false) 88 assertContainsAny(c, b, false) 89 90 assertContainsAll(a, b, false) 91 assertContainsAll(b, a, false) 92 assertContainsAll(a, c, true) 93 assertContainsAll(c, a, false) 94 assertContainsAll(b, c, false) 95 assertContainsAll(c, b, false) 96 }