github.com/fiatjaf/generic-ristretto@v0.0.1/z/histogram_test.go (about) 1 package z 2 3 import ( 4 "math" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestPercentile00(t *testing.T) { 11 size := int(math.Ceil((float64(514) - float64(32)) / float64(4))) 12 bounds := make([]float64, size+1) 13 for i := range bounds { 14 if i == 0 { 15 bounds[0] = 32 16 continue 17 } 18 if i == size { 19 bounds[i] = 514 20 break 21 } 22 bounds[i] = bounds[i-1] + 4 23 } 24 25 h := NewHistogramData(bounds) 26 for v := 16; v <= 1024; v = v + 4 { 27 for i := 0; i < 1000; i++ { 28 h.Update(int64(v)) 29 } 30 } 31 32 require.Equal(t, h.Percentile(0.0), 32.0) 33 } 34 35 func TestPercentile99(t *testing.T) { 36 size := int(math.Ceil((float64(514) - float64(32)) / float64(4))) 37 bounds := make([]float64, size+1) 38 for i := range bounds { 39 if i == 0 { 40 bounds[0] = 32 41 continue 42 } 43 if i == size { 44 bounds[i] = 514 45 break 46 } 47 bounds[i] = bounds[i-1] + 4 48 } 49 h := NewHistogramData(bounds) 50 for v := 16; v <= 512; v = v + 4 { 51 for i := 0; i < 1000; i++ { 52 h.Update(int64(v)) 53 } 54 } 55 56 require.Equal(t, h.Percentile(0.99), 512.0) 57 } 58 59 func TestPercentile100(t *testing.T) { 60 size := int(math.Ceil((float64(514) - float64(32)) / float64(4))) 61 bounds := make([]float64, size+1) 62 for i := range bounds { 63 if i == 0 { 64 bounds[0] = 32 65 continue 66 } 67 if i == size { 68 bounds[i] = 514 69 break 70 } 71 bounds[i] = bounds[i-1] + 4 72 } 73 h := NewHistogramData(bounds) 74 for v := 16; v <= 1024; v = v + 4 { 75 for i := 0; i < 1000; i++ { 76 h.Update(int64(v)) 77 } 78 } 79 require.Equal(t, h.Percentile(1.0), 514.0) 80 }