From 285848d099fdb4e68dad4ee9d5922a82e8372766 Mon Sep 17 00:00:00 2001 From: blindlobstar Date: Sun, 6 Apr 2025 20:38:41 +0200 Subject: [PATCH] added tests --- .../solution/solution.go | 6 - 02-equivalent-binary-trees/task.go | 4 +- 02-equivalent-binary-trees/task_test.go | 131 ++++++++++++++++++ 3 files changed, 132 insertions(+), 9 deletions(-) create mode 100644 02-equivalent-binary-trees/task_test.go diff --git a/02-equivalent-binary-trees/solution/solution.go b/02-equivalent-binary-trees/solution/solution.go index f62b499..49682a0 100644 --- a/02-equivalent-binary-trees/solution/solution.go +++ b/02-equivalent-binary-trees/solution/solution.go @@ -1,8 +1,6 @@ package main import ( - "fmt" - "golang.org/x/tour/tree" ) @@ -39,7 +37,3 @@ func Same(t1, t2 *tree.Tree) bool { } } } - -func main() { - fmt.Println(Same(tree.New(1), tree.New(2))) -} diff --git a/02-equivalent-binary-trees/task.go b/02-equivalent-binary-trees/task.go index a6e99cd..52fb086 100644 --- a/02-equivalent-binary-trees/task.go +++ b/02-equivalent-binary-trees/task.go @@ -12,7 +12,5 @@ func Walk(t *tree.Tree, ch chan int) { // Same determines whether the trees // t1 and t2 contain the same values. func Same(t1, t2 *tree.Tree) bool { -} - -func main() { + return false } diff --git a/02-equivalent-binary-trees/task_test.go b/02-equivalent-binary-trees/task_test.go new file mode 100644 index 0000000..1dabca3 --- /dev/null +++ b/02-equivalent-binary-trees/task_test.go @@ -0,0 +1,131 @@ +package main + +import ( + "reflect" + "sort" + "testing" + + "golang.org/x/tour/tree" +) + +func TestWalk(t *testing.T) { + tests := []struct { + name string + tree *tree.Tree + expected []int + }{ + { + name: "walk tree 1", + tree: tree.New(1), + expected: []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, + }, + { + name: "walk tree 2", + tree: tree.New(2), + expected: []int{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ch := make(chan int) + + var result []int + done := make(chan bool) + go func() { + for v := range ch { + result = append(result, v) + } + done <- true + }() + + Walk(tt.tree, ch) + + <-done + + sort.Ints(result) + sort.Ints(tt.expected) + + if !reflect.DeepEqual(result, tt.expected) { + t.Errorf("Walk() got = %v, want %v", result, tt.expected) + } + }) + } +} + +func TestWalkEmpty(t *testing.T) { + ch := make(chan int) + + var result []int + done := make(chan bool) + go func() { + for v := range ch { + result = append(result, v) + } + done <- true + }() + + Walk(nil, ch) + + <-done + + if len(result) != 0 { + t.Errorf("Walk() with nil tree got %v values, want empty", len(result)) + } +} + +func TestSame(t *testing.T) { + tests := []struct { + name string + t1 *tree.Tree + t2 *tree.Tree + want bool + }{ + { + name: "identical trees", + t1: tree.New(1), + t2: tree.New(1), + want: true, + }, + { + name: "different trees", + t1: tree.New(1), + t2: tree.New(2), + want: false, + }, + { + name: "nil first tree", + t1: nil, + t2: tree.New(1), + want: false, + }, + { + name: "nil second tree", + t1: tree.New(1), + t2: nil, + want: false, + }, + { + name: "both nil trees", + t1: nil, + t2: nil, + want: true, + }, + { + name: "same values different structure", + + t1: tree.New(1), + t2: tree.New(1), + want: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := Same(tt.t1, tt.t2) + if got != tt.want { + t.Errorf("Same() = %v, want %v", got, tt.want) + } + }) + } +}