| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package store
- import (
- "testing"
- "math/rand"
- "strconv"
- "time"
- "fmt"
- )
- func TestStoreGet(t *testing.T) {
- ts := &tree{
- &treeNode{
- CreateTestNode("/"),
- true,
- make(map[string]*treeNode),
- },
- }
- // create key
- ts.set("/foo", CreateTestNode("bar"))
- // change value
- ts.set("/foo", CreateTestNode("barbar"))
- // create key
- ts.set("/hello/foo", CreateTestNode("barbarbar"))
- treeNode, ok := ts.get("/foo")
- if !ok {
- t.Fatalf("Expect to get node, but not")
- }
- if treeNode.Value != "barbar" {
- t.Fatalf("Expect value barbar, but got %s", treeNode.Value)
- }
- // create key
- treeNode, ok = ts.get("/hello/foo")
- if !ok {
- t.Fatalf("Expect to get node, but not")
- }
- if treeNode.Value != "barbarbar" {
- t.Fatalf("Expect value barbarbar, but got %s", treeNode.Value)
- }
- // create a key under other key
- ok = ts.set("/foo/foo", CreateTestNode("bar"))
- if ok {
- t.Fatalf("shoud not add key under a exisiting key")
- }
- // delete a key
- ok = ts.delete("/foo")
- if !ok {
- t.Fatalf("cannot delete key")
- }
- // delete a directory
- ok = ts.delete("/hello")
- if ok {
- t.Fatalf("Expect cannot delet /hello, but deleted! ")
- }
- // test list
- ts.set("/hello/fooo", CreateTestNode("barbarbar"))
- ts.set("/hello/foooo/foo", CreateTestNode("barbarbar"))
- nodes, keys, dirs, ok := ts.list("/hello")
- if !ok {
- t.Fatalf("cannot list!")
- } else {
- length := len(nodes)
- for i := 0; i < length; i++ {
- fmt.Println(keys[i] , "=", nodes[i].Value, "[", dirs[i], "]")
- }
- }
- // speed test
- for i:=0; i < 100; i++ {
- key := "/"
- depth := rand.Intn(10)
- for j := 0; j < depth; j++ {
- key += "/" + strconv.Itoa(rand.Int()%10)
- }
- value := strconv.Itoa(rand.Int())
- ts.set(key, CreateTestNode(value))
- treeNode, ok := ts.get(key)
- if !ok {
- continue
- //t.Fatalf("Expect to get node, but not")
- }
- if treeNode.Value != value {
- t.Fatalf("Expect value %s, but got %s", value, treeNode.Value)
- }
- }
- ts.traverse(f, true)
- }
- func f (key string, n *Node) {
- fmt.Println(key, "=", n.Value)
- }
- func CreateTestNode(value string) Node{
- return Node{value, time.Unix(0,0), nil}
- }
|