kvs/btree/btree_test.go

156 lines
3.1 KiB
Go

package btree
import (
"fmt"
"testing"
)
func TestTree_Search(t *testing.T) {
tree := NewBtree(3)
tree.Insert("A", "a")
k := "A"
if _, err := tree.Search(k); err != nil {
t.Errorf("Not present %s", k)
}
k = "bike"
if val, err := tree.Search(k); err == nil {
t.Errorf("Present %s with value %s", k, val)
}
}
func TestTree_Remove(t *testing.T) {
tree := NewBtree(3)
toInsert := [][]string{
[]string{"Monday", "Lundi"},
[]string{"Tuesday", "Mardi"},
[]string{"Wednesday", "Mercredi"},
[]string{"Thursday", "Jeudi"},
[]string{"Friday", "Vendredi"},
[]string{"Saturday", "Samedi"},
[]string{"Sunday", "Dimanche"},
}
for _, k := range toInsert {
tree.Insert(k[0], k[1])
}
tree.Remove("Monday")
for _, k := range toInsert[1:] {
if _, err := tree.Search(k[0]); err != nil {
t.Errorf("Not present %s", k)
}
}
if val, err := tree.Search("Monday"); err == nil {
t.Errorf("Present %s with value %s", toInsert[0], val)
}
}
func TestTree_Insert(t *testing.T) {
tree := NewBtree(3)
toInsert := [][]string{
[]string{"Monday", "Lundi"},
[]string{"Tuesday", "Mardi"},
[]string{"Wednesday", "Mercredi"},
[]string{"Thursday", "Jeudi"},
[]string{"Friday", "Vendredi"},
[]string{"Saturday", "Samedi"},
[]string{"Sunday", "Dimanche"},
}
// Test before insertion
for _, k := range toInsert {
if val, err := tree.Search(k[0]); err == nil {
t.Errorf("Present %s with value %s", k[0], val)
}
}
for _, k := range toInsert {
tree.Insert(k[0], k[1])
}
// Test after insertion
for _, k := range toInsert {
if _, err := tree.Search(k[0]); err != nil {
t.Errorf("Not present %s", k)
}
}
}
func ExampleTree_Traverse() {
tree := NewBtree(3)
toInsert := [][]string{
[]string{"a", "C"},
[]string{"b", "B"},
[]string{"c", "C"},
[]string{"d", "D"},
[]string{"e", "E"},
[]string{"f", "F"},
[]string{"g", "G"},
[]string{"h", "H"},
[]string{"i", "I"},
[]string{"j", "J"},
[]string{"k", "K"},
[]string{"l", "L"},
[]string{"m", "M"},
[]string{"n", "N"},
[]string{"o", "O"},
[]string{"p", "P"},
[]string{"q", "Q"},
}
for _, k := range toInsert {
tree.Insert(k[0], k[1])
}
tree.Insert("a", "A")
tree.Visualize()
fmt.Println("")
tree.Traverse()
fmt.Println("")
tree.Remove("e")
tree.Traverse()
fmt.Println("")
tree.Remove("j")
tree.Traverse()
fmt.Println("")
tree.Remove("a")
tree.Traverse()
fmt.Println("")
tree.Remove("b")
tree.Traverse()
fmt.Println("")
tree.Remove("d")
tree.Traverse()
fmt.Println("")
tree.Remove("f")
tree.Traverse()
// Output:
// └── c:C f:F i:I l:L
// ├── a:A b:B
// ├── d:D e:E
// ├── g:G h:H
// ├── j:J k:K
// └── m:M n:N o:O p:P q:Q
//
// a:A b:B c:C d:D e:E f:F g:G h:H i:I j:J k:K l:L m:M n:N o:O p:P q:Q
// a:A b:B c:C d:D f:F g:G h:H i:I j:J k:K l:L m:M n:N o:O p:P q:Q
// a:A b:B c:C d:D f:F g:G h:H i:I k:K l:L m:M n:N o:O p:P q:Q
// b:B c:C d:D f:F g:G h:H i:I k:K l:L m:M n:N o:O p:P q:Q
// c:C d:D f:F g:G h:H i:I k:K l:L m:M n:N o:O p:P q:Q
// c:C f:F g:G h:H i:I k:K l:L m:M n:N o:O p:P q:Q
// c:C g:G h:H i:I k:K l:L m:M n:N o:O p:P q:Q
}