github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/types/denom_test.go (about) 1 package types 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 ) 8 9 var ( 10 atom = "atom" // 1 (base denom unit) 11 matom = "matom" // 10^-3 (milli) 12 uatom = "uatom" // 10^-6 (micro) 13 natom = "natom" // 10^-9 (nano) 14 ) 15 16 func TestRegisterDenom(t *testing.T) { 17 atomUnit := OneDec() // 1 (base denom unit) 18 19 require.NoError(t, RegisterDenom(atom, atomUnit)) 20 require.Error(t, RegisterDenom(atom, atomUnit)) 21 22 res, ok := GetDenomUnit(atom) 23 require.True(t, ok) 24 require.Equal(t, atomUnit, res) 25 26 res, ok = GetDenomUnit(matom) 27 require.False(t, ok) 28 require.Equal(t, ZeroDec(), res) 29 30 // reset registration 31 denomUnits = map[string]Dec{} 32 } 33 34 func TestConvertCoins(t *testing.T) { 35 atomUnit := OneDec() // 1 (base denom unit) 36 require.NoError(t, RegisterDenom(atom, atomUnit)) 37 38 matomUnit := NewDecWithPrec(1, 3) // 10^-3 (milli) 39 require.NoError(t, RegisterDenom(matom, matomUnit)) 40 41 uatomUnit := NewDecWithPrec(1, 6) // 10^-6 (micro) 42 require.NoError(t, RegisterDenom(uatom, uatomUnit)) 43 44 natomUnit := NewDecWithPrec(1, 9) // 10^-9 (nano) 45 require.NoError(t, RegisterDenom(natom, natomUnit)) 46 47 testCases := []struct { 48 input Coin 49 denom string 50 result Coin 51 expErr bool 52 }{ 53 {NewCoin("foo", ZeroInt()), atom, Coin{}, true}, 54 {NewCoin(atom, ZeroInt()), "foo", Coin{}, true}, 55 {NewCoin(atom, ZeroInt()), "FOO", Coin{}, true}, 56 57 {NewCoin(atom, NewInt(5)), matom, NewCoin(matom, NewInt(5000)), false}, // atom => matom 58 {NewCoin(atom, NewInt(5)), uatom, NewCoin(uatom, NewInt(5000000)), false}, // atom => uatom 59 {NewCoin(atom, NewInt(5)), natom, NewCoin(natom, NewInt(5000000000)), false}, // atom => natom 60 61 {NewCoin(uatom, NewInt(5000000)), matom, NewCoin(matom, NewInt(5000)), false}, // uatom => matom 62 {NewCoin(uatom, NewInt(5000000)), natom, NewCoin(natom, NewInt(5000000000)), false}, // uatom => natom 63 {NewCoin(uatom, NewInt(5000000)), atom, NewCoin(atom, NewInt(5)), false}, // uatom => atom 64 65 {NewCoin(matom, NewInt(5000)), natom, NewCoin(natom, NewInt(5000000000)), false}, // matom => natom 66 {NewCoin(matom, NewInt(5000)), uatom, NewCoin(uatom, NewInt(5000000)), false}, // matom => uatom 67 } 68 69 for i, tc := range testCases { 70 res, err := ConvertCoin(tc.input, tc.denom) 71 require.Equal( 72 t, tc.expErr, err != nil, 73 "unexpected error; tc: #%d, input: %s, denom: %s", i+1, tc.input, tc.denom, 74 ) 75 require.Equal( 76 t, tc.result, res, 77 "invalid result; tc: #%d, input: %s, denom: %s", i+1, tc.input, tc.denom, 78 ) 79 } 80 81 // reset registration 82 denomUnits = map[string]Dec{} 83 }