github.com/Finschia/finschia-sdk@v0.49.1/x/fswap/keeper/calc_test.go (about)

     1  package keeper
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  
     9  	sdk "github.com/Finschia/finschia-sdk/types"
    10  )
    11  
    12  func TestCalcSwap(t *testing.T) {
    13  	rateDot5, err := sdk.NewDecFromStr("0.5")
    14  	require.NoError(t, err)
    15  	rateDot3maxPrecision, err := sdk.NewDecFromStr("0.333333333333333333")
    16  	require.NoError(t, err)
    17  
    18  	finschiaSwapRate, err := sdk.NewDecFromStr("148.079656")
    19  	require.NoError(t, err)
    20  	conySwapRate := finschiaSwapRate.Mul(sdk.NewDec(1000000))
    21  	pebSwapRateForCony, err := sdk.NewDecFromStr("148079656000000")
    22  	require.NoError(t, err)
    23  	testCases := map[string]struct {
    24  		fromAmount     sdk.Int
    25  		expectedAmount sdk.Int
    26  		swapRate       sdk.Dec
    27  	}{
    28  		"swapRate 0.5": {
    29  			fromAmount:     sdk.ZeroInt(),
    30  			swapRate:       rateDot5,
    31  			expectedAmount: sdk.ZeroInt(),
    32  		},
    33  		"swapRate 0.333333333333333333": {
    34  			fromAmount:     sdk.NewInt(3),
    35  			swapRate:       rateDot3maxPrecision,
    36  			expectedAmount: sdk.ZeroInt(),
    37  		},
    38  		"swapRate conySwapRate(148.079656 * 10^6) fromAmount(1)": {
    39  			fromAmount:     sdk.NewInt(1),
    40  			swapRate:       conySwapRate,
    41  			expectedAmount: sdk.NewInt(148079656),
    42  		},
    43  		"swapRate conySwapRate(148.079656 * 10^6) fromAmount(3)": {
    44  			fromAmount:     sdk.NewInt(3),
    45  			swapRate:       conySwapRate,
    46  			expectedAmount: sdk.NewInt(444238968),
    47  		},
    48  		"pebSwapRateForCony pebSwapRateForCony(148.079656 * 10^12) fromAmount(1)": {
    49  			fromAmount:     sdk.NewInt(1),
    50  			swapRate:       pebSwapRateForCony,
    51  			expectedAmount: sdk.NewInt(148079656000000),
    52  		},
    53  		"pebSwapRateForCony pebSwapRateForCony(148.079656 * 10^12) fromAmount(3)": {
    54  			fromAmount:     sdk.NewInt(3),
    55  			swapRate:       pebSwapRateForCony,
    56  			expectedAmount: sdk.NewInt(444238968000000),
    57  		},
    58  	}
    59  	for name, tc := range testCases {
    60  		t.Run(name, func(t *testing.T) {
    61  			actualAmount := CalcSwap(tc.swapRate, tc.fromAmount)
    62  			require.Equal(t, tc.expectedAmount, actualAmount, fmt.Sprintf("tc.expectedAmount = %v, actualAmount = %v", tc.expectedAmount, actualAmount))
    63  		})
    64  	}
    65  }