arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/common/fee_test.go
common/fee_test.goRaw
 1package common
 2
 3import (
 4	"fmt"
 5	"math/big"
 6	"testing"
 7
 8	"github.com/stretchr/testify/assert"
 9)
10
11func TestFeePercentage(t *testing.T) {
12	assert.InEpsilon(t, 2.68e-18, FeeSelector(1).Percentage(), 0.002)
13	assert.InEpsilon(t, 6.76e-14, FeeSelector(10).Percentage(), 0.002)
14	assert.InEpsilon(t, 3.91e-03, FeeSelector(32).Percentage(), 0.002)
15	assert.InEpsilon(t, 7.29e-03, FeeSelector(50).Percentage(), 0.002)
16	assert.InEpsilon(t, 4.12e-02, FeeSelector(100).Percentage(), 0.002)
17	assert.InEpsilon(t, 2.33e-01, FeeSelector(150).Percentage(), 0.002)
18	assert.InEpsilon(t, 1.00e+00, FeeSelector(192).Percentage(), 0.002)
19	assert.InEpsilon(t, 2.56e+02, FeeSelector(200).Percentage(), 0.002)
20	assert.InEpsilon(t, 2.88e+17, FeeSelector(250).Percentage(), 0.002)
21}
22
23func TestCalcFeeAmount(t *testing.T) {
24	v := big.NewInt(1000)
25	feeAmount, err := CalcFeeAmount(v, FeeSelector(195)) // 800%
26	assert.Nil(t, err)
27	assert.Equal(t, "8000", feeAmount.String())
28
29	feeAmount, err = CalcFeeAmount(v, FeeSelector(192)) // 100%
30	assert.Nil(t, err)
31	assert.Equal(t, "1000", feeAmount.String())
32
33	feeAmount, err = CalcFeeAmount(v, FeeSelector(172)) // 50%
34	assert.Nil(t, err)
35	assert.Equal(t, "500", feeAmount.String())
36
37	feeAmount, err = CalcFeeAmount(v, FeeSelector(126)) // 10.2%
38	assert.Nil(t, err)
39	assert.Equal(t, "101", feeAmount.String())
40
41	feeAmount, err = CalcFeeAmount(v, FeeSelector(60)) // 1.03%
42	assert.Nil(t, err)
43	assert.Equal(t, "10", feeAmount.String())
44
45	feeAmount, err = CalcFeeAmount(v, FeeSelector(31)) // 0.127%
46	assert.Nil(t, err)
47	assert.Equal(t, "1", feeAmount.String())
48}
49
50func TestFeePrintSQLSwitch(t *testing.T) {
51	for i := 0; i < 256; i++ {
52		f := FeeSelector(i).Percentage()
53		fmt.Printf("        WHEN $1 = %03d THEN %.6e\n", i, f)
54	}
55}