|
|
@@ -169,38 +169,26 @@ func TestExpDecaySampleNanosecondRegression(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func TestExpDecaySampleStatistics(t *testing.T) {
|
|
|
+func TestExpDecaySampleSnapshot(t *testing.T) {
|
|
|
now := time.Now()
|
|
|
rand.Seed(1)
|
|
|
s := NewExpDecaySample(100, 0.99)
|
|
|
for i := 1; i <= 10000; i++ {
|
|
|
s.(*ExpDecaySample).update(now.Add(time.Duration(i)), int64(i))
|
|
|
}
|
|
|
- if count := s.Count(); 10000 != count {
|
|
|
- t.Errorf("s.Count(): 10000 != %v\n", count)
|
|
|
- }
|
|
|
- if min := s.Min(); 107 != min {
|
|
|
- t.Errorf("s.Min(): 107 != %v\n", min)
|
|
|
- }
|
|
|
- if max := s.Max(); 10000 != max {
|
|
|
- t.Errorf("s.Max(): 10000 != %v\n", max)
|
|
|
- }
|
|
|
- if mean := s.Mean(); 4965.98 != mean {
|
|
|
- t.Errorf("s.Mean(): 4965.98 != %v\n", mean)
|
|
|
- }
|
|
|
- if stdDev := s.StdDev(); 2959.825156930727 != stdDev {
|
|
|
- t.Errorf("s.StdDev(): 2959.825156930727 != %v\n", stdDev)
|
|
|
- }
|
|
|
- ps := s.Percentiles([]float64{0.5, 0.75, 0.99})
|
|
|
- if 4615 != ps[0] {
|
|
|
- t.Errorf("median: 4615 != %v\n", ps[0])
|
|
|
- }
|
|
|
- if 7672 != ps[1] {
|
|
|
- t.Errorf("75th percentile: 7672 != %v\n", ps[1])
|
|
|
- }
|
|
|
- if 9998.99 != ps[2] {
|
|
|
- t.Errorf("99th percentile: 9998.99 != %v\n", ps[2])
|
|
|
+ snapshot := s.Snapshot()
|
|
|
+ s.Update(1)
|
|
|
+ testExpDecaySampleStatistics(t, snapshot)
|
|
|
+}
|
|
|
+
|
|
|
+func TestExpDecaySampleStatistics(t *testing.T) {
|
|
|
+ now := time.Now()
|
|
|
+ rand.Seed(1)
|
|
|
+ s := NewExpDecaySample(100, 0.99)
|
|
|
+ for i := 1; i <= 10000; i++ {
|
|
|
+ s.(*ExpDecaySample).update(now.Add(time.Duration(i)), int64(i))
|
|
|
}
|
|
|
+ testExpDecaySampleStatistics(t, s)
|
|
|
}
|
|
|
|
|
|
func TestUniformSample(t *testing.T) {
|
|
|
@@ -225,44 +213,86 @@ func TestUniformSample(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func TestUniformSampleDup(t *testing.T) {
|
|
|
- s1 := NewUniformSample(100)
|
|
|
- s1.Update(1)
|
|
|
- s2 := s1.Dup()
|
|
|
- s1.Update(1)
|
|
|
- if 1 != s2.Size() {
|
|
|
- t.Fatal(s2)
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
func TestUniformSampleIncludesTail(t *testing.T) {
|
|
|
rand.Seed(1)
|
|
|
s := NewUniformSample(100)
|
|
|
max := 100
|
|
|
-
|
|
|
for i := 0; i < max; i++ {
|
|
|
s.Update(int64(i))
|
|
|
}
|
|
|
-
|
|
|
v := s.Values()
|
|
|
sum := 0
|
|
|
exp := (max - 1) * max / 2
|
|
|
-
|
|
|
for i := 0; i < len(v); i++ {
|
|
|
sum += int(v[i])
|
|
|
}
|
|
|
-
|
|
|
if exp != sum {
|
|
|
t.Errorf("sum: %v != %v\n", exp, sum)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func TestUniformSampleSnapshot(t *testing.T) {
|
|
|
+ s := NewUniformSample(100)
|
|
|
+ for i := 1; i <= 10000; i++ {
|
|
|
+ s.Update(int64(i))
|
|
|
+ }
|
|
|
+ snapshot := s.Snapshot()
|
|
|
+ s.Update(1)
|
|
|
+ testUniformSampleStatistics(t, snapshot)
|
|
|
+}
|
|
|
+
|
|
|
func TestUniformSampleStatistics(t *testing.T) {
|
|
|
rand.Seed(1)
|
|
|
s := NewUniformSample(100)
|
|
|
for i := 1; i <= 10000; i++ {
|
|
|
s.Update(int64(i))
|
|
|
}
|
|
|
+ testUniformSampleStatistics(t, s)
|
|
|
+}
|
|
|
+
|
|
|
+func benchmarkSample(b *testing.B, s Sample) {
|
|
|
+ var memStats runtime.MemStats
|
|
|
+ runtime.ReadMemStats(&memStats)
|
|
|
+ pauseTotalNs := memStats.PauseTotalNs
|
|
|
+ b.ResetTimer()
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ s.Update(1)
|
|
|
+ }
|
|
|
+ b.StopTimer()
|
|
|
+ runtime.GC()
|
|
|
+ runtime.ReadMemStats(&memStats)
|
|
|
+ b.Logf("GC cost: %d ns/op", int(memStats.PauseTotalNs-pauseTotalNs)/b.N)
|
|
|
+}
|
|
|
+
|
|
|
+func testExpDecaySampleStatistics(t *testing.T, s Sample) {
|
|
|
+ if count := s.Count(); 10000 != count {
|
|
|
+ t.Errorf("s.Count(): 10000 != %v\n", count)
|
|
|
+ }
|
|
|
+ if min := s.Min(); 107 != min {
|
|
|
+ t.Errorf("s.Min(): 107 != %v\n", min)
|
|
|
+ }
|
|
|
+ if max := s.Max(); 10000 != max {
|
|
|
+ t.Errorf("s.Max(): 10000 != %v\n", max)
|
|
|
+ }
|
|
|
+ if mean := s.Mean(); 4965.98 != mean {
|
|
|
+ t.Errorf("s.Mean(): 4965.98 != %v\n", mean)
|
|
|
+ }
|
|
|
+ if stdDev := s.StdDev(); 2959.825156930727 != stdDev {
|
|
|
+ t.Errorf("s.StdDev(): 2959.825156930727 != %v\n", stdDev)
|
|
|
+ }
|
|
|
+ ps := s.Percentiles([]float64{0.5, 0.75, 0.99})
|
|
|
+ if 4615 != ps[0] {
|
|
|
+ t.Errorf("median: 4615 != %v\n", ps[0])
|
|
|
+ }
|
|
|
+ if 7672 != ps[1] {
|
|
|
+ t.Errorf("75th percentile: 7672 != %v\n", ps[1])
|
|
|
+ }
|
|
|
+ if 9998.99 != ps[2] {
|
|
|
+ t.Errorf("99th percentile: 9998.99 != %v\n", ps[2])
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func testUniformSampleStatistics(t *testing.T, s Sample) {
|
|
|
if count := s.Count(); 10000 != count {
|
|
|
t.Errorf("s.Count(): 10000 != %v\n", count)
|
|
|
}
|
|
|
@@ -289,17 +319,3 @@ func TestUniformSampleStatistics(t *testing.T) {
|
|
|
t.Errorf("99th percentile: 9999.99 != %v\n", ps[2])
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-func benchmarkSample(b *testing.B, s Sample) {
|
|
|
- var memStats runtime.MemStats
|
|
|
- runtime.ReadMemStats(&memStats)
|
|
|
- pauseTotalNs := memStats.PauseTotalNs
|
|
|
- b.ResetTimer()
|
|
|
- for i := 0; i < b.N; i++ {
|
|
|
- s.Update(1)
|
|
|
- }
|
|
|
- b.StopTimer()
|
|
|
- runtime.GC()
|
|
|
- runtime.ReadMemStats(&memStats)
|
|
|
- b.Logf("GC cost: %d ns/op", int(memStats.PauseTotalNs-pauseTotalNs)/b.N)
|
|
|
-}
|