github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/metrics/histogram_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 //</624450099036033024> 11 12 package metrics 13 14 import "testing" 15 16 func BenchmarkHistogram(b *testing.B) { 17 h := NewHistogram(NewUniformSample(100)) 18 b.ResetTimer() 19 for i := 0; i < b.N; i++ { 20 h.Update(int64(i)) 21 } 22 } 23 24 func TestGetOrRegisterHistogram(t *testing.T) { 25 r := NewRegistry() 26 s := NewUniformSample(100) 27 NewRegisteredHistogram("foo", r, s).Update(47) 28 if h := GetOrRegisterHistogram("foo", r, s); 1 != h.Count() { 29 t.Fatal(h) 30 } 31 } 32 33 func TestHistogram10000(t *testing.T) { 34 h := NewHistogram(NewUniformSample(100000)) 35 for i := 1; i <= 10000; i++ { 36 h.Update(int64(i)) 37 } 38 testHistogram10000(t, h) 39 } 40 41 func TestHistogramEmpty(t *testing.T) { 42 h := NewHistogram(NewUniformSample(100)) 43 if count := h.Count(); 0 != count { 44 t.Errorf("h.Count(): 0 != %v\n", count) 45 } 46 if min := h.Min(); 0 != min { 47 t.Errorf("h.Min(): 0 != %v\n", min) 48 } 49 if max := h.Max(); 0 != max { 50 t.Errorf("h.Max(): 0 != %v\n", max) 51 } 52 if mean := h.Mean(); 0.0 != mean { 53 t.Errorf("h.Mean(): 0.0 != %v\n", mean) 54 } 55 if stdDev := h.StdDev(); 0.0 != stdDev { 56 t.Errorf("h.StdDev(): 0.0 != %v\n", stdDev) 57 } 58 ps := h.Percentiles([]float64{0.5, 0.75, 0.99}) 59 if 0.0 != ps[0] { 60 t.Errorf("median: 0.0 != %v\n", ps[0]) 61 } 62 if 0.0 != ps[1] { 63 t.Errorf("75th percentile: 0.0 != %v\n", ps[1]) 64 } 65 if 0.0 != ps[2] { 66 t.Errorf("99th percentile: 0.0 != %v\n", ps[2]) 67 } 68 } 69 70 func TestHistogramSnapshot(t *testing.T) { 71 h := NewHistogram(NewUniformSample(100000)) 72 for i := 1; i <= 10000; i++ { 73 h.Update(int64(i)) 74 } 75 snapshot := h.Snapshot() 76 h.Update(0) 77 testHistogram10000(t, snapshot) 78 } 79 80 func testHistogram10000(t *testing.T, h Histogram) { 81 if count := h.Count(); 10000 != count { 82 t.Errorf("h.Count(): 10000 != %v\n", count) 83 } 84 if min := h.Min(); 1 != min { 85 t.Errorf("h.Min(): 1 != %v\n", min) 86 } 87 if max := h.Max(); 10000 != max { 88 t.Errorf("h.Max(): 10000 != %v\n", max) 89 } 90 if mean := h.Mean(); 5000.5 != mean { 91 t.Errorf("h.Mean(): 5000.5 != %v\n", mean) 92 } 93 if stdDev := h.StdDev(); 2886.751331514372 != stdDev { 94 t.Errorf("h.StdDev(): 2886.751331514372 != %v\n", stdDev) 95 } 96 ps := h.Percentiles([]float64{0.5, 0.75, 0.99}) 97 if 5000.5 != ps[0] { 98 t.Errorf("median: 5000.5 != %v\n", ps[0]) 99 } 100 if 7500.75 != ps[1] { 101 t.Errorf("75th percentile: 7500.75 != %v\n", ps[1]) 102 } 103 if 9900.99 != ps[2] { 104 t.Errorf("99th percentile: 9900.99 != %v\n", ps[2]) 105 } 106 } 107