76 lines
1.2 KiB
Go
76 lines
1.2 KiB
Go
|
package zerolog
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
var samplers = []struct {
|
||
|
name string
|
||
|
sampler func() Sampler
|
||
|
total int
|
||
|
wantMin int
|
||
|
wantMax int
|
||
|
}{
|
||
|
{
|
||
|
"BasicSampler",
|
||
|
func() Sampler {
|
||
|
return &BasicSampler{N: 5}
|
||
|
},
|
||
|
100, 20, 20,
|
||
|
},
|
||
|
{
|
||
|
"RandomSampler",
|
||
|
func() Sampler {
|
||
|
return RandomSampler(5)
|
||
|
},
|
||
|
100, 10, 30,
|
||
|
},
|
||
|
{
|
||
|
"BurstSampler",
|
||
|
func() Sampler {
|
||
|
return &BurstSampler{Burst: 20, Period: time.Second}
|
||
|
},
|
||
|
100, 20, 20,
|
||
|
},
|
||
|
{
|
||
|
"BurstSamplerNext",
|
||
|
func() Sampler {
|
||
|
return &BurstSampler{Burst: 20, Period: time.Second, NextSampler: &BasicSampler{N: 5}}
|
||
|
},
|
||
|
120, 40, 40,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
func TestSamplers(t *testing.T) {
|
||
|
for i := range samplers {
|
||
|
s := samplers[i]
|
||
|
t.Run(s.name, func(t *testing.T) {
|
||
|
sampler := s.sampler()
|
||
|
got := 0
|
||
|
for t := s.total; t > 0; t-- {
|
||
|
if sampler.Sample(0) {
|
||
|
got++
|
||
|
}
|
||
|
}
|
||
|
if got < s.wantMin || got > s.wantMax {
|
||
|
t.Errorf("%s.Sample(0) == true %d on %d, want [%d, %d]", s.name, got, s.total, s.wantMin, s.wantMax)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func BenchmarkSamplers(b *testing.B) {
|
||
|
for i := range samplers {
|
||
|
s := samplers[i]
|
||
|
b.Run(s.name, func(b *testing.B) {
|
||
|
sampler := s.sampler()
|
||
|
b.RunParallel(func(pb *testing.PB) {
|
||
|
for pb.Next() {
|
||
|
sampler.Sample(0)
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
}
|