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  }