forked from cerc-io/plugeth
Fixed iterator
This commit is contained in:
parent
44eafb15e0
commit
99ebb869bf
@ -23,7 +23,6 @@ func (self *Iterator) Next() bool {
|
|||||||
self.Key = []byte(DecodeCompact(k))
|
self.Key = []byte(DecodeCompact(k))
|
||||||
|
|
||||||
return len(k) > 0
|
return len(k) > 0
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *Iterator) next(node Node, key []byte) []byte {
|
func (self *Iterator) next(node Node, key []byte) []byte {
|
||||||
@ -67,7 +66,7 @@ func (self *Iterator) next(node Node, key []byte) []byte {
|
|||||||
if BeginsWith(key, k) {
|
if BeginsWith(key, k) {
|
||||||
ret = self.next(cnode, skey)
|
ret = self.next(cnode, skey)
|
||||||
} else if bytes.Compare(k, key[:len(k)]) > 0 {
|
} else if bytes.Compare(k, key[:len(k)]) > 0 {
|
||||||
ret = self.key(node)
|
return self.key(node)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ret != nil {
|
if ret != nil {
|
||||||
|
@ -257,3 +257,42 @@ func BenchmarkUpdate(b *testing.B) {
|
|||||||
}
|
}
|
||||||
trie.Hash()
|
trie.Hash()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type kv struct {
|
||||||
|
k, v []byte
|
||||||
|
t bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLargeData(t *testing.T) {
|
||||||
|
trie := NewEmpty()
|
||||||
|
vals := make(map[string]*kv)
|
||||||
|
|
||||||
|
for i := byte(1); i < 255; i++ {
|
||||||
|
value := &kv{ethutil.LeftPadBytes([]byte{i}, 32), []byte{i}, false}
|
||||||
|
value2 := &kv{ethutil.LeftPadBytes([]byte{10, i}, 32), []byte{i}, false}
|
||||||
|
trie.Update(value.k, value.v)
|
||||||
|
trie.Update(value2.k, value2.v)
|
||||||
|
vals[string(value.k)] = value
|
||||||
|
vals[string(value2.k)] = value2
|
||||||
|
fmt.Println(value, "\n", value2)
|
||||||
|
}
|
||||||
|
|
||||||
|
it := trie.Iterator()
|
||||||
|
for it.Next() {
|
||||||
|
vals[string(it.Key)].t = true
|
||||||
|
}
|
||||||
|
|
||||||
|
var untouched []*kv
|
||||||
|
for _, value := range vals {
|
||||||
|
if !value.t {
|
||||||
|
untouched = append(untouched, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(untouched) > 0 {
|
||||||
|
t.Errorf("Missed %d nodes", len(untouched))
|
||||||
|
for _, value := range untouched {
|
||||||
|
t.Error(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user