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 }