123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- 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
- })
- }
|