github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/store/mpt/store_iterator_test.go (about) 1 package mpt 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/ethereum/go-ethereum/core/rawdb" 8 ethstate "github.com/ethereum/go-ethereum/core/state" 9 "github.com/stretchr/testify/require" 10 ) 11 12 var cases = []struct { 13 num int 14 }{ 15 {0}, 16 {1}, 17 {2}, 18 {100}, 19 {1000}, 20 {10000}, 21 } 22 23 func Test_Store_Iterate(t *testing.T) { 24 for i, c := range cases { 25 t.Run(fmt.Sprintf("test-%d", i), func(t *testing.T) { 26 trie, kvs := fullFillStore(c.num) 27 iter := newMptIterator(trie, nil, nil) 28 defer iter.Close() 29 count := 0 30 iKvs := make(map[string]string, c.num) 31 for ; iter.Valid(); iter.Next() { 32 require.NotNil(t, iter.Key()) 33 iKvs[string(iter.Key())] = string(iter.Value()) 34 count++ 35 } 36 require.EqualValues(t, kvs, iKvs) 37 require.Equal(t, c.num, len(iKvs)) 38 require.Equal(t, c.num, count) 39 }) 40 } 41 } 42 43 func fullFillStore(num int) (ethstate.Trie, map[string]string) { 44 db := ethstate.NewDatabase(rawdb.NewMemoryDatabase()) 45 tr, err := db.OpenTrie(NilHash) 46 if err != nil { 47 panic("Fail to open root mpt: " + err.Error()) 48 } 49 50 kvs := make(map[string]string, num) 51 for i := 0; i < num; i++ { 52 k, v := fmt.Sprintf("key-%d", i), fmt.Sprintf("value-%d", i) 53 kvs[k] = v 54 if err := tr.TryUpdate([]byte(k), []byte(v)); err != nil { 55 panic(err) 56 } 57 } 58 return tr, kvs 59 }