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  }