github.com/filecoin-project/specs-actors/v4@v4.0.2/actors/builtin/miner/deadlines_test.go (about) 1 package miner_test 2 3 import ( 4 "testing" 5 6 "github.com/filecoin-project/go-state-types/abi" 7 "github.com/stretchr/testify/assert" 8 9 "github.com/filecoin-project/specs-actors/v4/actors/builtin/miner" 10 ) 11 12 func TestProvingPeriodDeadlines(t *testing.T) { 13 14 t.Run("quantization spec rounds to the next deadline", func(t *testing.T) { 15 periodStart := abi.ChainEpoch(2) 16 curr := periodStart + miner.WPoStProvingPeriod 17 d := miner.NewDeadlineInfo(periodStart, 10, curr) 18 quant := miner.QuantSpecForDeadline(d) 19 assert.Equal(t, d.NextNotElapsed().Last(), quant.QuantizeUp(curr)) 20 }) 21 } 22 23 func TestDeadlineInfoFromOffsetAndEpoch(t *testing.T) { 24 25 // All proving periods equivalent mod WPoStProving period should give equivalent 26 // dlines for a given epoch. Only the offset property should matter 27 t.Run("Offset and epoch invariant checking", func(t *testing.T) { 28 pp := abi.ChainEpoch(1972) 29 ppThree := abi.ChainEpoch(1972 + 2880*3) 30 ppMillion := abi.ChainEpoch(1972 + 2880*10e6) 31 32 epochs := []abi.ChainEpoch{4, 2000, 400000, 5000000} 33 for _, epoch := range epochs { 34 dlineA := miner.NewDeadlineInfoFromOffsetAndEpoch(pp, epoch) 35 dlineB := miner.NewDeadlineInfoFromOffsetAndEpoch(ppThree, epoch) 36 dlineC := miner.NewDeadlineInfoFromOffsetAndEpoch(ppMillion, epoch) 37 38 assert.Equal(t, *dlineA, *dlineB) 39 assert.Equal(t, *dlineB, *dlineC) 40 } 41 }) 42 t.Run("sanity checks", func(t *testing.T) { 43 offset := abi.ChainEpoch(7) 44 start := abi.ChainEpoch(2880*103) + offset 45 // epoch 2880*103 + offset we are in deadline 0, pp start = 2880*103 + offset 46 dline := miner.NewDeadlineInfoFromOffsetAndEpoch(offset, start) 47 assert.Equal(t, uint64(0), dline.Index) 48 assert.Equal(t, start, dline.PeriodStart) 49 50 // epoch 2880*103 + offset + WPoStChallengeWindow - 1 we are in deadline 0 51 dline = miner.NewDeadlineInfoFromOffsetAndEpoch(offset, start+miner.WPoStChallengeWindow-1) 52 assert.Equal(t, uint64(0), dline.Index) 53 assert.Equal(t, start, dline.PeriodStart) 54 55 // epoch 2880*103 + offset + WPoStChallengeWindow we are in deadline 1 56 dline = miner.NewDeadlineInfoFromOffsetAndEpoch(offset, start+miner.WPoStChallengeWindow) 57 assert.Equal(t, uint64(1), dline.Index) 58 assert.Equal(t, start, dline.PeriodStart) 59 60 // epoch 2880*103 + offset + 40*WPoStChallengeWindow we are in deadline 40 61 dline = miner.NewDeadlineInfoFromOffsetAndEpoch(offset, start+40*miner.WPoStChallengeWindow) 62 assert.Equal(t, uint64(40), dline.Index) 63 assert.Equal(t, start, dline.PeriodStart) 64 65 // epoch 2880*103 + offset + 40*WPoStChallengeWindow - 1 we are in deadline 39 66 dline = miner.NewDeadlineInfoFromOffsetAndEpoch(offset, start+40*miner.WPoStChallengeWindow-1) 67 assert.Equal(t, uint64(39), dline.Index) 68 assert.Equal(t, start, dline.PeriodStart) 69 70 // epoch 2880*103 + offset + 40*WPoStChallengeWindow + 1 we are in deadline 40 71 dline = miner.NewDeadlineInfoFromOffsetAndEpoch(offset, start+40*miner.WPoStChallengeWindow+1) 72 assert.Equal(t, uint64(40), dline.Index) 73 assert.Equal(t, start, dline.PeriodStart) 74 75 // epoch 2880*103 + offset + WPoStPeriodDeadlines*WPoStChallengeWindow -1 we are in deadline WPoStPeriodDeadlines - 1 76 dline = miner.NewDeadlineInfoFromOffsetAndEpoch(offset, start+abi.ChainEpoch(miner.WPoStPeriodDeadlines)*miner.WPoStChallengeWindow-abi.ChainEpoch(1)) 77 assert.Equal(t, uint64(miner.WPoStPeriodDeadlines-1), dline.Index) 78 assert.Equal(t, start, dline.PeriodStart) 79 80 // epoch 2880*103 + offset + WPoStPeriodDeadlines*WPoStChallengeWindow + 1 we are in deadline 0, pp start = 2880*104 + offset 81 dline = miner.NewDeadlineInfoFromOffsetAndEpoch(offset, start+abi.ChainEpoch(miner.WPoStPeriodDeadlines)*miner.WPoStChallengeWindow) 82 assert.Equal(t, uint64(0), dline.Index) 83 assert.Equal(t, start+miner.WPoStProvingPeriod, dline.PeriodStart) 84 85 }) 86 }