histogram_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package metrics
  2. import "testing"
  3. func BenchmarkHistogram(b *testing.B) {
  4. h := NewHistogram(NewUniformSample(100))
  5. b.ResetTimer()
  6. for i := 0; i < b.N; i++ {
  7. h.Update(int64(i))
  8. }
  9. }
  10. func TestHistogram10000(t *testing.T) {
  11. h := NewHistogram(NewUniformSample(100000))
  12. for i := 1; i <= 10000; i++ {
  13. h.Update(int64(i))
  14. }
  15. if count := h.Count(); 10000 != count {
  16. t.Errorf("h.Count(): 10000 != %v\n", count)
  17. }
  18. if min := h.Min(); 1 != min {
  19. t.Errorf("h.Min(): 1 != %v\n", min)
  20. }
  21. if max := h.Max(); 10000 != max {
  22. t.Errorf("h.Max(): 10000 != %v\n", max)
  23. }
  24. if mean := h.Mean(); 5000.5 != mean {
  25. t.Errorf("h.Mean(): 5000.5 != %v\n", mean)
  26. }
  27. if stdDev := h.StdDev(); 2886.8956799071675 != stdDev {
  28. t.Errorf("h.StdDev(): 2886.8956799071675 != %v\n", stdDev)
  29. }
  30. ps := h.Percentiles([]float64{0.5, 0.75, 0.99})
  31. if 5000.5 != ps[0] {
  32. t.Errorf("median: 5000.5 != %v\n", ps[0])
  33. }
  34. if 7500.75 != ps[1] {
  35. t.Errorf("75th percentile: 7500.75 != %v\n", ps[1])
  36. }
  37. if 9900.99 != ps[2] {
  38. t.Errorf("99th percentile: 9900.99 != %v\n", ps[2])
  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. }