histogram_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // includes code from
  2. // https://raw.githubusercontent.com/rcrowley/go-metrics/master/sample.go
  3. // Copyright 2012 Richard Crowley. All rights reserved.
  4. package metrics
  5. import "testing"
  6. func BenchmarkHistogram(b *testing.B) {
  7. h := NewHistogram(nil, NewUniformSample(100))
  8. b.ResetTimer()
  9. for i := 0; i < b.N; i++ {
  10. h.Update(int64(i))
  11. }
  12. }
  13. func TestHistogram10000(t *testing.T) {
  14. h := NewHistogram(nil, NewUniformSample(100000))
  15. for i := 1; i <= 10000; i++ {
  16. h.Update(int64(i))
  17. }
  18. testHistogram10000(t, h)
  19. }
  20. func TestHistogramEmpty(t *testing.T) {
  21. h := NewHistogram(nil, NewUniformSample(100))
  22. if count := h.Count(); 0 != count {
  23. t.Errorf("h.Count(): 0 != %v\n", count)
  24. }
  25. if min := h.Min(); 0 != min {
  26. t.Errorf("h.Min(): 0 != %v\n", min)
  27. }
  28. if max := h.Max(); 0 != max {
  29. t.Errorf("h.Max(): 0 != %v\n", max)
  30. }
  31. if mean := h.Mean(); 0.0 != mean {
  32. t.Errorf("h.Mean(): 0.0 != %v\n", mean)
  33. }
  34. if stdDev := h.StdDev(); 0.0 != stdDev {
  35. t.Errorf("h.StdDev(): 0.0 != %v\n", stdDev)
  36. }
  37. ps := h.Percentiles([]float64{0.5, 0.75, 0.99})
  38. if 0.0 != ps[0] {
  39. t.Errorf("median: 0.0 != %v\n", ps[0])
  40. }
  41. if 0.0 != ps[1] {
  42. t.Errorf("75th percentile: 0.0 != %v\n", ps[1])
  43. }
  44. if 0.0 != ps[2] {
  45. t.Errorf("99th percentile: 0.0 != %v\n", ps[2])
  46. }
  47. }
  48. func TestHistogramSnapshot(t *testing.T) {
  49. h := NewHistogram(nil, NewUniformSample(100000))
  50. for i := 1; i <= 10000; i++ {
  51. h.Update(int64(i))
  52. }
  53. snapshot := h.Snapshot().(Histogram)
  54. h.Update(0)
  55. testHistogram10000(t, snapshot)
  56. }
  57. func testHistogram10000(t *testing.T, h Histogram) {
  58. if count := h.Count(); 10000 != count {
  59. t.Errorf("h.Count(): 10000 != %v\n", count)
  60. }
  61. if min := h.Min(); 1 != min {
  62. t.Errorf("h.Min(): 1 != %v\n", min)
  63. }
  64. if max := h.Max(); 10000 != max {
  65. t.Errorf("h.Max(): 10000 != %v\n", max)
  66. }
  67. if mean := h.Mean(); 5000.5 != mean {
  68. t.Errorf("h.Mean(): 5000.5 != %v\n", mean)
  69. }
  70. if stdDev := h.StdDev(); 2886.751331514372 != stdDev {
  71. t.Errorf("h.StdDev(): 2886.751331514372 != %v\n", stdDev)
  72. }
  73. ps := h.Percentiles([]float64{0.5, 0.75, 0.99})
  74. if 5000.5 != ps[0] {
  75. t.Errorf("median: 5000.5 != %v\n", ps[0])
  76. }
  77. if 7500.75 != ps[1] {
  78. t.Errorf("75th percentile: 7500.75 != %v\n", ps[1])
  79. }
  80. if 9900.99 != ps[2] {
  81. t.Errorf("99th percentile: 9900.99 != %v\n", ps[2])
  82. }
  83. }