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

     1  package miner
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/filecoin-project/go-state-types/abi"
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestQuantizeUp(t *testing.T) {
    11  	t.Run("no quantization", func(t *testing.T) {
    12  		q := NoQuantization
    13  		assert.Equal(t, abi.ChainEpoch(0), q.QuantizeUp(0))
    14  		assert.Equal(t, abi.ChainEpoch(1), q.QuantizeUp(1))
    15  		assert.Equal(t, abi.ChainEpoch(2), q.QuantizeUp(2))
    16  		assert.Equal(t, abi.ChainEpoch(123456789), q.QuantizeUp(123456789))
    17  	})
    18  	t.Run("zero offset", func(t *testing.T) {
    19  		assert.Equal(t, abi.ChainEpoch(50), quantizeUp(42, 10, 0))
    20  		assert.Equal(t, abi.ChainEpoch(16000), quantizeUp(16000, 100, 0))
    21  		assert.Equal(t, abi.ChainEpoch(0), quantizeUp(-5, 10, 0))
    22  		assert.Equal(t, abi.ChainEpoch(-50), quantizeUp(-50, 10, 0))
    23  		assert.Equal(t, abi.ChainEpoch(-50), quantizeUp(-53, 10, 0))
    24  	})
    25  
    26  	t.Run("non zero offset", func(t *testing.T) {
    27  		assert.Equal(t, abi.ChainEpoch(6), quantizeUp(4, 5, 1))
    28  		assert.Equal(t, abi.ChainEpoch(1), quantizeUp(0, 5, 1))
    29  		assert.Equal(t, abi.ChainEpoch(-4), quantizeUp(-6, 5, 1))
    30  		assert.Equal(t, abi.ChainEpoch(4), quantizeUp(2, 10, 4))
    31  	})
    32  
    33  	t.Run("offset seed bigger than unit is normalized", func(t *testing.T) {
    34  		assert.Equal(t, abi.ChainEpoch(13), quantizeUp(9, 5, 28)) // offset should be 3
    35  		assert.Equal(t, abi.ChainEpoch(10000), quantizeUp(10000, 100, 2000000))
    36  	})
    37  }
    38  
    39  func TestQuantizeDown(t *testing.T) {
    40  	t.Run("no quantization", func(t *testing.T) {
    41  		q := NoQuantization
    42  		assert.Equal(t, abi.ChainEpoch(0), q.QuantizeDown(0))
    43  		assert.Equal(t, abi.ChainEpoch(1), q.QuantizeDown(1))
    44  		assert.Equal(t, abi.ChainEpoch(1337), q.QuantizeDown(1337))
    45  	})
    46  	t.Run("zero offset", func(t *testing.T) {
    47  		q := NewQuantSpec(abi.ChainEpoch(10), abi.ChainEpoch(0))
    48  		assert.Equal(t, abi.ChainEpoch(6660), q.QuantizeDown(6666))
    49  		assert.Equal(t, abi.ChainEpoch(50), q.QuantizeDown(50))
    50  		assert.Equal(t, abi.ChainEpoch(50), q.QuantizeDown(59))
    51  	})
    52  
    53  	t.Run("non zero offset", func(t *testing.T) {
    54  		q := NewQuantSpec(abi.ChainEpoch(10), abi.ChainEpoch(1))
    55  		assert.Equal(t, abi.ChainEpoch(11), q.QuantizeDown(20))
    56  		assert.Equal(t, abi.ChainEpoch(11), q.QuantizeDown(11))
    57  	})
    58  }