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