github.com/filecoin-project/specs-actors/v4@v4.0.2/actors/builtin/miner/termination_test.go (about) 1 package miner_test 2 3 import ( 4 "testing" 5 6 "github.com/filecoin-project/go-bitfield" 7 "github.com/filecoin-project/go-state-types/abi" 8 "github.com/stretchr/testify/require" 9 10 "github.com/filecoin-project/specs-actors/v4/actors/builtin/miner" 11 ) 12 13 func TestTerminationResult(t *testing.T) { 14 var result miner.TerminationResult 15 require.True(t, result.IsEmpty()) 16 err := result.ForEach(func(epoch abi.ChainEpoch, sectors bitfield.BitField) error { 17 require.FailNow(t, "unreachable") 18 return nil 19 }) 20 require.NoError(t, err) 21 22 resultA := miner.TerminationResult{ 23 Sectors: map[abi.ChainEpoch]bitfield.BitField{ 24 3: bitfield.NewFromSet([]uint64{9}), 25 0: bitfield.NewFromSet([]uint64{1, 2, 4}), 26 2: bitfield.NewFromSet([]uint64{3, 5, 7}), 27 }, 28 PartitionsProcessed: 1, 29 SectorsProcessed: 7, 30 } 31 require.False(t, resultA.IsEmpty()) 32 resultB := miner.TerminationResult{ 33 Sectors: map[abi.ChainEpoch]bitfield.BitField{ 34 1: bitfield.NewFromSet([]uint64{12}), 35 0: bitfield.NewFromSet([]uint64{10}), 36 }, 37 PartitionsProcessed: 1, 38 SectorsProcessed: 2, 39 } 40 require.False(t, resultB.IsEmpty()) 41 require.NoError(t, result.Add(resultA)) 42 require.NoError(t, result.Add(resultB)) 43 require.False(t, result.IsEmpty()) 44 expected := miner.TerminationResult{ 45 Sectors: map[abi.ChainEpoch]bitfield.BitField{ 46 2: bitfield.NewFromSet([]uint64{3, 5, 7}), 47 0: bitfield.NewFromSet([]uint64{1, 2, 4, 10}), 48 1: bitfield.NewFromSet([]uint64{12}), 49 3: bitfield.NewFromSet([]uint64{9}), 50 }, 51 PartitionsProcessed: 2, 52 SectorsProcessed: 9, 53 } 54 require.Equal(t, expected.SectorsProcessed, result.SectorsProcessed) 55 require.Equal(t, expected.PartitionsProcessed, result.PartitionsProcessed) 56 require.Equal(t, len(expected.Sectors), len(result.Sectors)) 57 58 expectedEpoch := abi.ChainEpoch(0) 59 err = result.ForEach(func(epoch abi.ChainEpoch, actualBf bitfield.BitField) error { 60 require.Equal(t, expectedEpoch, epoch) 61 expectedEpoch++ 62 expectedBf, ok := expected.Sectors[epoch] 63 require.True(t, ok) 64 expectedNos, err := expectedBf.All(1000) 65 require.NoError(t, err) 66 actualNos, err := actualBf.All(1000) 67 require.NoError(t, err) 68 require.Equal(t, expectedNos, actualNos) 69 return nil 70 }) 71 require.NoError(t, err) 72 73 // partitions = 2, sectors = 9 74 require.False(t, result.BelowLimit(2, 9)) 75 require.False(t, result.BelowLimit(3, 9)) 76 require.False(t, result.BelowLimit(3, 8)) 77 require.False(t, result.BelowLimit(2, 10)) 78 require.True(t, result.BelowLimit(3, 10)) 79 }