156 lines
3.1 KiB
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
|
|
}
|