github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/metrics/timer_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:40</date> 10 //</624450100294324224> 11 12 package metrics 13 14 import ( 15 "fmt" 16 "math" 17 "testing" 18 "time" 19 ) 20 21 func BenchmarkTimer(b *testing.B) { 22 tm := NewTimer() 23 b.ResetTimer() 24 for i := 0; i < b.N; i++ { 25 tm.Update(1) 26 } 27 } 28 29 func TestGetOrRegisterTimer(t *testing.T) { 30 r := NewRegistry() 31 NewRegisteredTimer("foo", r).Update(47) 32 if tm := GetOrRegisterTimer("foo", r); 1 != tm.Count() { 33 t.Fatal(tm) 34 } 35 } 36 37 func TestTimerExtremes(t *testing.T) { 38 tm := NewTimer() 39 tm.Update(math.MaxInt64) 40 tm.Update(0) 41 if stdDev := tm.StdDev(); 4.611686018427388e+18 != stdDev { 42 t.Errorf("tm.StdDev(): 4.611686018427388e+18 != %v\n", stdDev) 43 } 44 } 45 46 func TestTimerStop(t *testing.T) { 47 l := len(arbiter.meters) 48 tm := NewTimer() 49 if len(arbiter.meters) != l+1 { 50 t.Errorf("arbiter.meters: %d != %d\n", l+1, len(arbiter.meters)) 51 } 52 tm.Stop() 53 if len(arbiter.meters) != l { 54 t.Errorf("arbiter.meters: %d != %d\n", l, len(arbiter.meters)) 55 } 56 } 57 58 func TestTimerFunc(t *testing.T) { 59 tm := NewTimer() 60 tm.Time(func() { time.Sleep(50e6) }) 61 if max := tm.Max(); 35e6 > max || max > 145e6 { 62 t.Errorf("tm.Max(): 35e6 > %v || %v > 145e6\n", max, max) 63 } 64 } 65 66 func TestTimerZero(t *testing.T) { 67 tm := NewTimer() 68 if count := tm.Count(); 0 != count { 69 t.Errorf("tm.Count(): 0 != %v\n", count) 70 } 71 if min := tm.Min(); 0 != min { 72 t.Errorf("tm.Min(): 0 != %v\n", min) 73 } 74 if max := tm.Max(); 0 != max { 75 t.Errorf("tm.Max(): 0 != %v\n", max) 76 } 77 if mean := tm.Mean(); 0.0 != mean { 78 t.Errorf("tm.Mean(): 0.0 != %v\n", mean) 79 } 80 if stdDev := tm.StdDev(); 0.0 != stdDev { 81 t.Errorf("tm.StdDev(): 0.0 != %v\n", stdDev) 82 } 83 ps := tm.Percentiles([]float64{0.5, 0.75, 0.99}) 84 if 0.0 != ps[0] { 85 t.Errorf("median: 0.0 != %v\n", ps[0]) 86 } 87 if 0.0 != ps[1] { 88 t.Errorf("75th percentile: 0.0 != %v\n", ps[1]) 89 } 90 if 0.0 != ps[2] { 91 t.Errorf("99th percentile: 0.0 != %v\n", ps[2]) 92 } 93 if rate1 := tm.Rate1(); 0.0 != rate1 { 94 t.Errorf("tm.Rate1(): 0.0 != %v\n", rate1) 95 } 96 if rate5 := tm.Rate5(); 0.0 != rate5 { 97 t.Errorf("tm.Rate5(): 0.0 != %v\n", rate5) 98 } 99 if rate15 := tm.Rate15(); 0.0 != rate15 { 100 t.Errorf("tm.Rate15(): 0.0 != %v\n", rate15) 101 } 102 if rateMean := tm.RateMean(); 0.0 != rateMean { 103 t.Errorf("tm.RateMean(): 0.0 != %v\n", rateMean) 104 } 105 } 106 107 func ExampleGetOrRegisterTimer() { 108 m := "account.create.latency" 109 t := GetOrRegisterTimer(m, nil) 110 t.Update(47) 111 fmt.Println(t.Max()) //产量:47 112 } 113