1
0
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:
wdvxdr 2022-01-30 15:35:14 +08:00
parent d2a58014bc
commit 6c7445772c
No known key found for this signature in database
GPG Key ID: 703F8C071DE7A1B6
2 changed files with 31 additions and 0 deletions

View File

@ -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)
}
}

View File

@ -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)
}