Skip to content

Commit

Permalink
Merge pull request #15 from c-osmosis/math-test
Browse files Browse the repository at this point in the history
Math test
  • Loading branch information
hyehan authored Oct 29, 2020
2 parents 3f0ba30 + 9d5364e commit 7527331
Showing 1 changed file with 213 additions and 10 deletions.
223 changes: 213 additions & 10 deletions x/gamm/keeper/pool/math_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,45 @@ import (
"github.com/stretchr/testify/require"
)

func TestPowApprox(t *testing.T) {
base, err := sdk.NewDecFromStr("1.5")
func TestSubSign(t *testing.T) {
decA, err := sdk.NewDecFromStr("3.2")
require.NoError(t, err)
decB, err := sdk.NewDecFromStr("4.3432389")
require.NoError(t, err)

s, b := subSign(decA, decB)
require.True(t, b)

expectedDec, err := sdk.NewDecFromStr("1.1432389")
require.NoError(t, err)
exp, err := sdk.NewDecFromStr("0.4")
require.Equal(t, expectedDec, s)
}

func TestPowApprox(t *testing.T) {
base, err := sdk.NewDecFromStr("0.8")
require.NoError(t, err)
precision, err := sdk.NewDecFromStr("0.00000001")
exp, err := sdk.NewDecFromStr("0.32")
require.NoError(t, err)

s := powApprox(base, exp, precision)
expectedDec, err := sdk.NewDecFromStr("1.17607902")
s := powApprox(base, exp, powPrecision)
expectedDec, err := sdk.NewDecFromStr("0.93108385")
require.NoError(t, err)

require.True(
t,
expectedDec.Sub(s).Abs().LTE(precision),
expectedDec.Sub(s).Abs().LTE(powPrecision),
"expected value & actual value's difference should less than precision",
)
}

func TestPow(t *testing.T) {
base, err := sdk.NewDecFromStr("1.4")
base, err := sdk.NewDecFromStr("1.68")
require.NoError(t, err)
exp, err := sdk.NewDecFromStr("3.2")
exp, err := sdk.NewDecFromStr("0.32")
require.NoError(t, err)

s := pow(base, exp)
expectedDec, err := sdk.NewDecFromStr("2.93501087")
expectedDec, err := sdk.NewDecFromStr("1.18058965")
require.NoError(t, err)

require.True(
Expand All @@ -43,3 +55,194 @@ func TestPow(t *testing.T) {
"expected value & actual value's difference should less than precision",
)
}

func TestCalcSpotPrice(t *testing.T) {
tokenBalanceIn, err := sdk.NewDecFromStr("100")
require.NoError(t, err)
tokenWeightIn, err := sdk.NewDecFromStr("0.1")
require.NoError(t, err)
tokenBalanceOut, err := sdk.NewDecFromStr("200")
require.NoError(t, err)
tokenWeightOut, err := sdk.NewDecFromStr("0.3")
require.NoError(t, err)
swapFee, err := sdk.NewDecFromStr("0.01")
require.NoError(t, err)

s := calcSpotPrice(tokenBalanceIn, tokenWeightIn, tokenBalanceOut, tokenWeightOut, swapFee)

expectedDec, err := sdk.NewDecFromStr("1.51515151")
require.NoError(t, err)

require.True(
t,
expectedDec.Sub(s).Abs().LTE(powPrecision),
"expected value & actual value's difference should less than precision",
)

}

func TestCalcOutGivenIn(t *testing.T) {

tokenBalanceIn, err := sdk.NewDecFromStr("100")
require.NoError(t, err)
tokenWeightIn, err := sdk.NewDecFromStr("0.1")
require.NoError(t, err)
tokenBalanceOut, err := sdk.NewDecFromStr("200")
require.NoError(t, err)
tokenWeightOut, err := sdk.NewDecFromStr("0.3")
require.NoError(t, err)
tokenAmountIn, err := sdk.NewDecFromStr("40")
require.NoError(t, err)
swapFee, err := sdk.NewDecFromStr("0.01")
require.NoError(t, err)

s := calcOutGivenIn(tokenBalanceIn, tokenWeightIn, tokenBalanceOut, tokenWeightOut, tokenAmountIn, swapFee)

expectedDec, err := sdk.NewDecFromStr("21.0487006")
require.NoError(t, err)

require.True(
t,
expectedDec.Sub(s).Abs().LTE(powPrecision.MulInt64(10000)),
"expected value & actual value's difference should less than precision*10000",
)

}

func TestCalcInGivenOut(t *testing.T) {

tokenBalanceIn, err := sdk.NewDecFromStr("100")
require.NoError(t, err)
tokenWeightIn, err := sdk.NewDecFromStr("0.1")
require.NoError(t, err)
tokenBalanceOut, err := sdk.NewDecFromStr("200")
require.NoError(t, err)
tokenWeightOut, err := sdk.NewDecFromStr("0.3")
require.NoError(t, err)
tokenAmountOut, err := sdk.NewDecFromStr("70")
require.NoError(t, err)
swapFee, err := sdk.NewDecFromStr("0.01")
require.NoError(t, err)

s := calcInGivenOut(tokenBalanceIn, tokenWeightIn, tokenBalanceOut, tokenWeightOut, tokenAmountOut, swapFee)

expectedDec, err := sdk.NewDecFromStr("266.8009177")
require.NoError(t, err)

require.True(
t,
expectedDec.Sub(s).Abs().LTE(powPrecision.MulInt64(10)),
"expected value & actual value's difference should less than precision*10",
)
}

func TestCalcPoolOutGivenSingleIn(t *testing.T) {

tokenBalanceIn, err := sdk.NewDecFromStr("100")
require.NoError(t, err)
tokenWeightIn, err := sdk.NewDecFromStr("0.2")
require.NoError(t, err)
poolSupply, err := sdk.NewDecFromStr("300")
require.NoError(t, err)
totalWeight, err := sdk.NewDecFromStr("1")
require.NoError(t, err)
tokenAmountIn, err := sdk.NewDecFromStr("40")
require.NoError(t, err)
swapFee, err := sdk.NewDecFromStr("0.15")
require.NoError(t, err)

s := calcPoolOutGivenSingleIn(tokenBalanceIn, tokenWeightIn, poolSupply, totalWeight, tokenAmountIn, swapFee)

expectedDec, err := sdk.NewDecFromStr("18.6519592")
require.NoError(t, err)

require.True(
t,
expectedDec.Sub(s).Abs().LTE(powPrecision.MulInt64(10000)),
"expected value & actual value's difference should less than precision*10000",
)
}

/*
func TestCalcSingleInGivenPoolOut(t *testing.T) {
tokenBalanceIn, err := sdk.NewDecFromStr("100")
require.NoError(t, err)
tokenWeightIn, err := sdk.NewDecFromStr("0.2")
require.NoError(t, err)
poolSupply, err := sdk.NewDecFromStr("300")
require.NoError(t, err)
totalWeight, err := sdk.NewDecFromStr("1")
require.NoError(t, err)
poolAmountOut, err := sdk.NewDecFromStr("70")
require.NoError(t, err)
swapFee, err := sdk.NewDecFromStr("0.15")
require.NoError(t, err)
s := calcSingleInGivenPoolOut(tokenBalanceIn, tokenWeightIn, poolSupply, totalWeight, poolAmountOut, swapFee)
fmt.Println(s)
expectedDec, err := sdk.NewDecFromStr(".")
require.NoError(t, err)
require.True(
t,
expectedDec.Sub(s).Abs().LTE(powPrecision.MulInt64(10000)),
"expected value & actual value's difference should less than precision*10000",
)
}
*/

func TestCalcSingleOutGivenPoolIn(t *testing.T) {

tokenBalanceOut, err := sdk.NewDecFromStr("200")
require.NoError(t, err)
tokenWeightOut, err := sdk.NewDecFromStr("0.8")
require.NoError(t, err)
poolSupply, err := sdk.NewDecFromStr("300")
require.NoError(t, err)
totalWeight, err := sdk.NewDecFromStr("1")
require.NoError(t, err)
poolAmountIn, err := sdk.NewDecFromStr("40")
require.NoError(t, err)
swapFee, err := sdk.NewDecFromStr("0.15")
require.NoError(t, err)

s := calcSingleOutGivenPoolIn(tokenBalanceOut, tokenWeightOut, poolSupply, totalWeight, poolAmountIn, swapFee)

expectedDec, err := sdk.NewDecFromStr("31.77534976")
require.NoError(t, err)

require.True(
t,
expectedDec.Sub(s).Abs().LTE(powPrecision.MulInt64(10000)),
"expected value & actual value's difference should less than precision*10000",
)
}

func TestCalcPoolInGivenSingleOut(t *testing.T) {

tokenBalanceOut, err := sdk.NewDecFromStr("200")
require.NoError(t, err)
tokenWeightOut, err := sdk.NewDecFromStr("0.8")
require.NoError(t, err)
poolSupply, err := sdk.NewDecFromStr("300")
require.NoError(t, err)
totalWeight, err := sdk.NewDecFromStr("1")
require.NoError(t, err)
tokenAmountOut, err := sdk.NewDecFromStr("70")
require.NoError(t, err)
swapFee, err := sdk.NewDecFromStr("0.15")
require.NoError(t, err)

s := calcPoolInGivenSingleOut(tokenBalanceOut, tokenWeightOut, poolSupply, totalWeight, tokenAmountOut, swapFee)

expectedDec, err := sdk.NewDecFromStr("90.29092777")
require.NoError(t, err)

require.True(
t,
expectedDec.Sub(s).Abs().LTE(powPrecision.MulInt64(10000)),
"expected value & actual value's difference should less than precision*10000",
)
}

0 comments on commit 7527331

Please sign in to comment.