github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/store/list/list_test.go (about) 1 package list 2 3 import ( 4 "math/rand" 5 "testing" 6 7 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/log" 8 dbm "github.com/fibonacci-chain/fbc/libs/tm-db" 9 10 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 11 12 "github.com/stretchr/testify/require" 13 14 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 15 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/rootmulti" 16 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 17 ) 18 19 type TestStruct struct { 20 I uint64 21 B bool 22 } 23 24 func defaultComponents(key sdk.StoreKey) (sdk.Context, *codec.Codec) { 25 db := dbm.NewMemDB() 26 cms := rootmulti.NewStore(db) 27 cms.MountStoreWithDB(key, sdk.StoreTypeIAVL, db) 28 cms.LoadLatestVersion() 29 ctx := sdk.NewContext(cms, abci.Header{}, false, log.NewNopLogger()) 30 cdc := codec.New() 31 return ctx, cdc 32 } 33 func TestList(t *testing.T) { 34 key := sdk.NewKVStoreKey("test") 35 ctx, cdc := defaultComponents(key) 36 store := ctx.KVStore(key) 37 lm := NewList(cdc, store) 38 39 val := TestStruct{1, true} 40 var res TestStruct 41 42 lm.Push(val) 43 require.Equal(t, uint64(1), lm.Len()) 44 lm.Get(uint64(0), &res) 45 require.Equal(t, val, res) 46 47 val = TestStruct{2, false} 48 lm.Set(uint64(0), val) 49 lm.Get(uint64(0), &res) 50 require.Equal(t, val, res) 51 52 val = TestStruct{100, false} 53 lm.Push(val) 54 require.Equal(t, uint64(2), lm.Len()) 55 lm.Get(uint64(1), &res) 56 require.Equal(t, val, res) 57 58 lm.Delete(uint64(1)) 59 require.Equal(t, uint64(2), lm.Len()) 60 61 lm.Iterate(&res, func(index uint64) (brk bool) { 62 var temp TestStruct 63 lm.Get(index, &temp) 64 require.Equal(t, temp, res) 65 66 require.True(t, index != 1) 67 return 68 }) 69 70 lm.Iterate(&res, func(index uint64) (brk bool) { 71 lm.Set(index, TestStruct{res.I + 1, !res.B}) 72 return 73 }) 74 75 lm.Get(uint64(0), &res) 76 require.Equal(t, TestStruct{3, true}, res) 77 } 78 79 func TestListRandom(t *testing.T) { 80 key := sdk.NewKVStoreKey("test") 81 ctx, cdc := defaultComponents(key) 82 store := ctx.KVStore(key) 83 list := NewList(cdc, store) 84 mocklist := []uint32{} 85 86 for i := 0; i < 100; i++ { 87 item := rand.Uint32() 88 list.Push(item) 89 mocklist = append(mocklist, item) 90 } 91 92 for k, v := range mocklist { 93 k := k 94 var i uint32 95 require.NotPanics(t, func() { list.Get(uint64(k), &i) }) 96 require.Equal(t, v, i) 97 } 98 }