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