github.com/filecoin-project/specs-actors/v4@v4.0.2/actors/builtin/miner/bitfield_test.go (about)

     1  package miner_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/filecoin-project/go-bitfield"
     7  	rlepluslazy "github.com/filecoin-project/go-bitfield/rle"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func assertBitfieldsEqual(t *testing.T, expected bitfield.BitField, actual bitfield.BitField) {
    13  	const maxDiff = 100
    14  
    15  	missing, err := bitfield.SubtractBitField(expected, actual)
    16  	require.NoError(t, err)
    17  	unexpected, err := bitfield.SubtractBitField(actual, expected)
    18  	require.NoError(t, err)
    19  
    20  	missingSet, err := missing.All(maxDiff)
    21  	require.NoError(t, err, "more than %d missing bits expected", maxDiff)
    22  	assert.Empty(t, missingSet, "expected missing bits")
    23  
    24  	unexpectedSet, err := unexpected.All(maxDiff)
    25  	require.NoError(t, err, "more than %d unexpected bits", maxDiff)
    26  	assert.Empty(t, unexpectedSet, "unexpected bits set")
    27  }
    28  
    29  func assertBitfieldEquals(t *testing.T, actual bitfield.BitField, expected ...uint64) {
    30  	assertBitfieldsEqual(t, actual, bf(expected...))
    31  }
    32  
    33  func assertBitfieldEmpty(t *testing.T, bf bitfield.BitField) {
    34  	empty, err := bf.IsEmpty()
    35  	require.NoError(t, err)
    36  	assert.True(t, empty)
    37  }
    38  
    39  // Create a bitfield with count bits set, starting at "start".
    40  func seq(t *testing.T, start, count uint64) bitfield.BitField {
    41  	var runs []rlepluslazy.Run
    42  	if start > 0 {
    43  		runs = append(runs, rlepluslazy.Run{Val: false, Len: start})
    44  	}
    45  	runs = append(runs, rlepluslazy.Run{Val: true, Len: count})
    46  	bf, err := bitfield.NewFromIter(&rlepluslazy.RunSliceIterator{Runs: runs})
    47  	require.NoError(t, err)
    48  	return bf
    49  }