package sortedmap_test import ( "bytes" "encoding/json" "fmt" "sort" "testing" "git.wecise.com/wecise/common/matrix/sortedmap" "github.com/dave/stablegob" "github.com/dgryski/go-farm" ) func TestJSON(t *testing.T) { var x interface{} x = string(append([]byte("中文"), 0)) m := map[string]string{"test": x.(string)} bs, _ := json.Marshal(m) fmt.Println("json:" + string(bs)) m = map[string]string{"test": string(append([]byte("中文"), 0, 0))} bs, _ = json.Marshal(m) fmt.Println("json:" + string(bs)) } func TestSortedMap(t *testing.T) { hash := make([]uint64, 20) for n := 0; n < 20; n++ { m := map[string]string{} for i := 0; i < n; i++ { m[fmt.Sprint("key", n, "-", i)] = fmt.Sprint("value", n, "-", i) } m["appSystem"] = string(append([]byte("精卫统一运维平台"), 0, 0)) m["centerCode"] = "上海NPC" m["deptName"] = "运维系统部" m["mountpoint"] = "/" m["originkpi"] = "os.linux.fs used" m["name"] = "fs used" buf := &bytes.Buffer{} encoder := stablegob.NewEncoder(buf) encoder.Encode(m) fmt.Println(buf.String()) fmt.Println(buf.Bytes()) fmt.Println(len(buf.Bytes())) h := farm.Hash64(buf.Bytes()) // h, _ := odb.NMap2ikey("class", "field", "name", m) hash[n] = h fmt.Println(h) fmt.Println() } for n := 19; n >= 0; n-- { m := map[string]string{} for i := 0; i < n; i++ { m[fmt.Sprint("key", n, "-", i)] = fmt.Sprint("value", n, "-", i) } m["appSystem"] = string(append([]byte("精卫统一运维平台"), 0, 0, byte(n))) m["centerCode"] = "上海NPC" m["deptName"] = "运维系统部" m["mountpoint"] = "/" m["originkpi"] = "os.linux.fs used" m["name"] = "fs used" buf := &bytes.Buffer{} encoder := stablegob.NewEncoder(buf) encoder.Encode(m) fmt.Println(buf.String()) fmt.Println(buf.Bytes()) fmt.Println(len(buf.Bytes())) h := farm.Hash64(buf.Bytes()) // h, _ := odb.NMap2ikey("class", "field", "name", m) if hash[n] != h { println(n, " : ", h, "!=", hash[n]) } fmt.Println(h) fmt.Println() } } func BenchmarkSortedMap(b *testing.B) { labels := map[string]string{} for i := 0; i < 100; i++ { labels[fmt.Sprint("key", i)] = fmt.Sprint("value", i) } // ks := []string{} for k := range labels { ks = append(ks, k) } sort.Strings(ks) // buf := &bytes.Buffer{} for _, k := range ks { buf.WriteString(k + ":" + labels[k] + ",") } } func BenchmarkStablegob(b *testing.B) { labels := map[string]string{} for i := 0; i < 100; i++ { labels[fmt.Sprint("key", i)] = fmt.Sprint("value", i) } // buf := &bytes.Buffer{} encoder := stablegob.NewEncoder(buf) encoder.Encode(labels) } // 简单 map 编码 /*ks := []string{} for k := range m { ks = append(ks, k) } sort.Strings(ks) for _, k := range ks { buf.WriteString(k + ":" + m[k] + ",") }*/ func BenchmarkTreeMap(b *testing.B) { labels := sortedmap.NewTreeMap() for i := 0; i < 100; i++ { labels.Put(fmt.Sprint("key", i), fmt.Sprint("value", i)) } // buf := &bytes.Buffer{} labels.Fetch(func(k, v interface{}) bool { buf.WriteString(k.(string) + ":" + v.(string) + ",") return true }) }