Expose bug for small samples
beorn7
7 years ago
32 | 32 | for quantile, epsilon := range Targets { |
33 | 33 | n := float64(len(a)) |
34 | 34 | k := int(quantile * n) |
35 | if k < 1 { | |
36 | k = 1 | |
37 | } | |
35 | 38 | lower := int((quantile - epsilon) * n) |
36 | 39 | if lower < 1 { |
37 | 40 | lower = 1 |
98 | 101 | verifyPercsWithAbsoluteEpsilon(t, a, s) |
99 | 102 | } |
100 | 103 | |
104 | func TestTargetedQuerySmallSampleSize(t *testing.T) { | |
105 | rand.Seed(42) | |
106 | s := NewTargeted(TargetsSmallEpsilon) | |
107 | a := []float64{1, 2, 3, 4, 5} | |
108 | for _, v := range a { | |
109 | s.Insert(v) | |
110 | } | |
111 | verifyPercsWithAbsoluteEpsilon(t, a, s) | |
112 | // If not yet flushed, results should be precise: | |
113 | if !s.flushed() { | |
114 | for φ, want := range map[float64]float64{ | |
115 | 0.01: 1, | |
116 | 0.10: 1, | |
117 | 0.50: 3, | |
118 | 0.90: 5, | |
119 | 0.99: 5, | |
120 | } { | |
121 | if got := s.Query(φ); got != want { | |
122 | t.Errorf("want %f for φ=%f, got %f", want, φ, got) | |
123 | } | |
124 | } | |
125 | } | |
126 | } | |
127 | ||
101 | 128 | func TestLowBiasedQuery(t *testing.T) { |
102 | 129 | rand.Seed(42) |
103 | 130 | s := NewLowBiased(RelativeEpsilon) |