Fixed panic on set after delete

Fix btree reset single item
This commit is contained in:
tidwall 2018-10-11 03:58:43 -07:00
parent 1f177b7641
commit 0ac1eea9be
2 changed files with 47 additions and 0 deletions

View File

@ -195,6 +195,7 @@ func (tr *BTree) Delete(key string) (prev interface{}, deleted bool) {
tr.length-- tr.length--
if tr.length == 0 { if tr.length == 0 {
tr.root = nil tr.root = nil
tr.height = 0
} }
return return
} }

View File

@ -428,3 +428,49 @@ func BenchmarkTidwallGet(b *testing.B) {
tr.Get(keys[i]) tr.Get(keys[i])
} }
} }
func TestBTreeOne(t *testing.T) {
var tr BTree
tr.Set("1", "1")
tr.Delete("1")
tr.Set("1", "1")
tr.Delete("1")
tr.Set("1", "1")
tr.Delete("1")
}
func TestBTree256(t *testing.T) {
var tr BTree
var n int
for j := 0; j < 2; j++ {
for _, i := range rand.Perm(256) {
tr.Set(fmt.Sprintf("%d", i), i)
n++
if tr.Len() != n {
t.Fatalf("expected 256, got %d", n)
}
}
for _, i := range rand.Perm(256) {
v, ok := tr.Get(fmt.Sprintf("%d", i))
if !ok {
t.Fatal("expected true")
}
if v.(int) != i {
t.Fatalf("expected %d, got %d", i, v.(int))
}
}
for _, i := range rand.Perm(256) {
tr.Delete(fmt.Sprintf("%d", i))
n--
if tr.Len() != n {
t.Fatalf("expected 256, got %d", n)
}
}
for _, i := range rand.Perm(256) {
_, ok := tr.Get(fmt.Sprintf("%d", i))
if ok {
t.Fatal("expected false")
}
}
}
}