From 4768b82b11a52e30008443fba3c45fc6882bba77 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Wed, 3 Jul 2013 15:00:50 -0700 Subject: [PATCH] add traverse func and fix testing --- store/{tree_store.go => tree.go} | 15 ++++++++++ store/tree_store_test.go | 48 +++++++++++++++++++------------- 2 files changed, 43 insertions(+), 20 deletions(-) rename store/{tree_store.go => tree.go} (92%) diff --git a/store/tree_store.go b/store/tree.go similarity index 92% rename from store/tree_store.go rename to store/tree.go index 336d2cf02..7fba9274c 100644 --- a/store/tree_store.go +++ b/store/tree.go @@ -3,6 +3,7 @@ package store import ( "path" "strings" + "fmt" ) type tree struct { @@ -141,3 +142,17 @@ func (s *tree) delete(key string) bool { return false } +func (t *tree) traverse() { + dfs(t.Root) +} + +func dfs(t *treeNode) { + if len(t.NodeMap) == 0{ + fmt.Println(t.Value.Value) + } else { + for _, _treeNode := range t.NodeMap { + dfs(_treeNode) + } + } +} + diff --git a/store/tree_store_test.go b/store/tree_store_test.go index b356d1f8d..f4f1ca302 100644 --- a/store/tree_store_test.go +++ b/store/tree_store_test.go @@ -4,27 +4,28 @@ import ( "testing" "math/rand" "strconv" + "time" ) func TestStoreGet(t *testing.T) { ts := &tree{ &treeNode{ - "/", + CreateTestNode("/"), true, make(map[string]*treeNode), }, } // create key - ts.set("/foo", "bar") + ts.set("/foo", CreateTestNode("bar")) // change value - ts.set("/foo", "barbar") + ts.set("/foo", CreateTestNode("barbar")) // create key - ts.set("/hello/foo", "barbarbar") - treeNode := ts.get("/foo") + ts.set("/hello/foo", CreateTestNode("barbarbar")) + treeNode, ok := ts.get("/foo") - if treeNode == nil { + if !ok { t.Fatalf("Expect to get node, but not") } if treeNode.Value != "barbar" { @@ -32,8 +33,8 @@ func TestStoreGet(t *testing.T) { } // create key - treeNode = ts.get("/hello/foo") - if treeNode == nil { + treeNode, ok = ts.get("/hello/foo") + if !ok { t.Fatalf("Expect to get node, but not") } if treeNode.Value != "barbarbar" { @@ -41,36 +42,36 @@ func TestStoreGet(t *testing.T) { } // create a key under other key - _, err := ts.set("/foo/foo", "bar") - if err == nil { + ok = ts.set("/foo/foo", CreateTestNode("bar")) + if ok { t.Fatalf("shoud not add key under a exisiting key") } // delete a key - oldValue := ts.delete("/foo") - if oldValue != "barbar" { - t.Fatalf("Expect Oldvalue bar, but got %s", oldValue) + ok = ts.delete("/foo") + if !ok { + t.Fatalf("cannot delete key") } // delete a directory - oldValue = ts.delete("/hello") - if oldValue != "" { - t.Fatalf("Expect cannot delet /hello, but deleted! %s", oldValue) + ok = ts.delete("/hello") + if ok { + t.Fatalf("Expect cannot delet /hello, but deleted! ") } // speed test - for i:=0; i < 10000; i++ { + for i:=0; i < 100; i++ { key := "/" depth := rand.Intn(10) for j := 0; j < depth; j++ { key += "/" + strconv.Itoa(rand.Int()) } value := strconv.Itoa(rand.Int()) - ts.set(key, value) - treeNode := ts.get(key) + ts.set(key, CreateTestNode(value)) + treeNode, ok := ts.get(key) - if treeNode == nil { + if !ok { t.Fatalf("Expect to get node, but not") } if treeNode.Value != value { @@ -79,4 +80,11 @@ func TestStoreGet(t *testing.T) { } + ts.traverse() + +} + + +func CreateTestNode(value string) Node{ + return Node{value, time.Unix(0,0), nil} } \ No newline at end of file