* changelog * ... * decimal func working * decimal complete, untested * fixing tests * decimal compile errors resolved * test compile errors * precision multiplier test * 1% laptop battery * fixed TestNewDecFromStr * equalities working * fix bankers round chop * ... * working, some decimal issues resolved * fix rounding error * rounding works * decimal works * ... * deleted rational * rational conversion working * revert changelog * code compiles (not tests) * went through all NewDec, made sure they were converted from NewRat properly * test debugging * all testing bugs besides the json marshalling fixed * json unmarshal * lint * document update * fix lcd test * cli test fix * mostly undo Dece -> Rate * val comments * Efficiency improvements This now caches all of the precision multipliers (as they were all used in non-mutative functions), and caches the precisionInt calculation. (Now it just copies the already calculated value) * Cache another precisionInt() call. * Improve banker rounding efficiency * remove defer, make negation in-place. * chris val comments * bez comments * Aditya comments * ... * val comments * rebasing start * ... * compiling * tests pass * cli fix * anton, cwgoes, val comments * val and jae comments * type * undo reuse quo
72 lines
2.1 KiB
Go
72 lines
2.1 KiB
Go
package assoc
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
dbm "github.com/tendermint/tendermint/libs/db"
|
|
|
|
"github.com/cosmos/cosmos-sdk/examples/democoin/mock"
|
|
"github.com/cosmos/cosmos-sdk/store"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/cosmos/cosmos-sdk/wire"
|
|
)
|
|
|
|
func defaultContext(key sdk.StoreKey) sdk.Context {
|
|
db := dbm.NewMemDB()
|
|
cms := store.NewCommitMultiStore(db)
|
|
cms.MountStoreWithDB(key, sdk.StoreTypeIAVL, db)
|
|
cms.LoadLatestVersion()
|
|
ctx := sdk.NewContext(cms, abci.Header{}, false, nil)
|
|
return ctx
|
|
}
|
|
|
|
func TestValidatorSet(t *testing.T) {
|
|
key := sdk.NewKVStoreKey("test")
|
|
ctx := defaultContext(key)
|
|
|
|
addr1 := []byte("addr1")
|
|
addr2 := []byte("addr2")
|
|
|
|
base := &mock.ValidatorSet{[]mock.Validator{
|
|
{addr1, sdk.NewDec(1)},
|
|
{addr2, sdk.NewDec(2)},
|
|
}}
|
|
|
|
valset := NewValidatorSet(wire.NewCodec(), ctx.KVStore(key).Prefix([]byte("assoc")), base, 1, 5)
|
|
|
|
require.Equal(t, base.Validator(ctx, addr1), valset.Validator(ctx, addr1))
|
|
require.Equal(t, base.Validator(ctx, addr2), valset.Validator(ctx, addr2))
|
|
|
|
assoc1 := []byte("asso1")
|
|
assoc2 := []byte("asso2")
|
|
|
|
require.True(t, valset.Associate(ctx, addr1, assoc1))
|
|
require.True(t, valset.Associate(ctx, addr2, assoc2))
|
|
|
|
require.Equal(t, base.Validator(ctx, addr1), valset.Validator(ctx, assoc1))
|
|
require.Equal(t, base.Validator(ctx, addr2), valset.Validator(ctx, assoc2))
|
|
|
|
require.Equal(t, base.Validator(ctx, addr1), valset.Validator(ctx, addr1))
|
|
require.Equal(t, base.Validator(ctx, addr2), valset.Validator(ctx, addr2))
|
|
|
|
assocs := valset.Associations(ctx, addr1)
|
|
require.Equal(t, 1, len(assocs))
|
|
require.True(t, bytes.Equal(assoc1, assocs[0]))
|
|
|
|
require.False(t, valset.Associate(ctx, addr1, assoc2))
|
|
require.False(t, valset.Associate(ctx, addr2, assoc1))
|
|
|
|
valset.Dissociate(ctx, addr1, assoc1)
|
|
valset.Dissociate(ctx, addr2, assoc2)
|
|
|
|
require.Equal(t, base.Validator(ctx, addr1), valset.Validator(ctx, addr1))
|
|
require.Equal(t, base.Validator(ctx, addr2), valset.Validator(ctx, addr2))
|
|
|
|
require.Nil(t, valset.Validator(ctx, assoc1))
|
|
require.Nil(t, valset.Validator(ctx, assoc2))
|
|
}
|