123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- // tree_tes
- package tree
- import (
- "fmt"
- _ "strings"
- "testing"
- )
- type StringTree struct {
- Node
- Data string
- }
- func NewStringTree(value string) *StringTree {
- res := &StringTree{}
- res.Data = value
- res.SetParent(nil)
- return res
- }
- func InitStringTree(args ...interface{}) Noder {
- str := args[0].(string)
- return NewStringTree(str)
- }
- func TestSibling(test *testing.T) {
- n1 := NewStringTree("s1")
- n2 := NewStringTree("s2")
- n3 := NewStringTree("s3")
- AppendSibling(n1, n2)
- AppendSibling(n1, n3)
- NewSibling(n1, InitStringTree, "s4")
- Display(n1)
- }
- func TestNode(test *testing.T) {
- tree := NewStringTree("root")
- s1 := "l1 c1"
- s2 := "l1 c2"
- s3 := "l1 c3"
- s4 := "l2 c1"
- l1c1 := NewChild(tree, InitStringTree, s1)
- if tree.Child() != l1c1 {
- test.Errorf("Child() %v: %v<->%v", tree, tree.Child(), l1c1)
- }
- if LastChild(tree) != l1c1 {
- test.Errorf("LastChild() %v: %v<->%v", tree, tree.Child(), l1c1)
- }
- l1c2 := NewChild(tree, InitStringTree, s2)
- if tree.Child() != l1c1 {
- test.Errorf("Child() %v: %v<->%v", tree, tree.Child(), l1c1)
- }
- if LastChild(tree) != l1c2 {
- test.Errorf("LastChild() %v: %v<->%v", tree, tree.Child(), l1c2)
- }
- l1c3 := NewChild(tree, InitStringTree, s3)
- if LastChild(tree) != l1c3 {
- test.Errorf("LastChild() %v: %v<->%v", tree, tree.Child(), l1c3)
- }
- l2c1 := NewChild(l1c2, InitStringTree, s4)
- if l1c2.Child() != l2c1 {
- test.Errorf("Child() %v: %v<->%v", l1c2, l1c2.Child(), l2c1)
- }
- if LastChild(l1c2) != l2c1 {
- test.Errorf("LastChild() %v: %v<->%v", l1c2, l1c2.Child(), l2c1)
- }
- if l1c1.(*StringTree).Data != s1 {
- test.Error("Data ")
- }
- if l1c2.(*StringTree).Data != s2 {
- test.Error("Data ")
- }
- if l1c3.(*StringTree).Data != s3 {
- test.Error("Data ")
- }
- if l2c1.(*StringTree).Data != s4 {
- test.Error("Data ")
- }
- Display(tree)
- if tree.Child() != l1c1 {
- test.Errorf("Child() %v: %v<->%v", tree, tree.Child(), l1c1)
- }
- if l1c1.After() != l1c2 {
- test.Errorf("After() %v<->%v", tree.After(), l1c2)
- }
- if l1c2.After() != l1c3 {
- test.Error("After()")
- }
- if l1c2.Child() != l2c1 {
- test.Error("Child()")
- }
- n := Walk(tree, func(node Noder) Noder {
- fmt.Println("%v", node)
- if node.(*StringTree).Data == s4 {
- return node
- }
- return nil
- })
- if n.(*StringTree).Data != s4 {
- test.Error("Data ")
- }
- test.Logf("%v", n.(*StringTree).Data)
- test.Log("Hi tree!")
- }
- type Tn struct {
- Node
- data string
- }
- func TestNoder(test *testing.T) {
- test.Log("Hi treenoder!")
- }
- func TestDelete(test *testing.T) {
- tree := NewStringTree("root")
- s1 := "l1 c1"
- s2 := "l1 c2"
- s3 := "l1 c3"
- s4 := "l2 c1"
- _ = NewChild(tree, InitStringTree, s1)
- l1c2 := NewChild(tree, InitStringTree, s2)
- _ = NewChild(tree, InitStringTree, s3)
- _ = NewChild(l1c2, InitStringTree, s4)
- Remove(l1c2)
- Display(tree)
- n := Walk(tree, func(node Noder) Noder {
- fmt.Println("%v", node)
- if node.(*StringTree).Data == l1c2.(*StringTree).Data {
- return node
- }
- return nil
- })
- if n != nil {
- test.Errorf("Not deleted: %v", n)
- }
- }
|