mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-06 03:53:50 +08:00
fix: fix btree iterate
This commit is contained in:
parent
d2a58014bc
commit
6c7445772c
@ -526,6 +526,7 @@ func (d *DB) Delete(hash *byte) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Foreach iterates over all items in the database file.
|
||||
func (d *DB) Foreach(iter func(key [16]byte, value []byte)) {
|
||||
top := d.get(d.top)
|
||||
d.iterate(top, iter)
|
||||
@ -542,4 +543,9 @@ func (d *DB) iterate(table *table, iter func(key [16]byte, value []byte)) {
|
||||
d.iterate(child, iter)
|
||||
}
|
||||
}
|
||||
item := table.items[table.size]
|
||||
if item.child != 0 {
|
||||
child := d.get(item.child)
|
||||
d.iterate(child, iter)
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/Mrs4s/MiraiGo/utils"
|
||||
assert2 "github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
@ -65,3 +66,27 @@ func TestBtree(t *testing.T) {
|
||||
|
||||
assert2.NoError(t, bt.Close())
|
||||
}
|
||||
|
||||
func TestDB_Foreach(t *testing.T) {
|
||||
const elemSize = 100
|
||||
set := make([]string, elemSize)
|
||||
for i := 0; i < elemSize; i++ {
|
||||
set[i] = utils.RandomString(20)
|
||||
}
|
||||
f := tempfile(t)
|
||||
defer os.Remove(f)
|
||||
bt, err := Create(f)
|
||||
defer bt.Close()
|
||||
assert2.NoError(t, err)
|
||||
for _, v := range set {
|
||||
hash := sha1.New()
|
||||
hash.Write([]byte(v))
|
||||
bt.Insert(&hash.Sum(nil)[0], []byte(v))
|
||||
}
|
||||
|
||||
var ss []string
|
||||
bt.Foreach(func(key [16]byte, value []byte) {
|
||||
ss = append(ss, string(value))
|
||||
})
|
||||
assert2.ElementsMatch(t, set, ss)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user