@@ -25,37 +25,6 @@ public void testGetOnEmptyValues() {
25
25
assertEquals (Double .NaN , ckms .get (0 ), 0 );
26
26
}
27
27
28
- @ Test
29
- public void testGetWhenNoQuantilesAreDefined () {
30
- CKMSQuantiles ckms = new CKMSQuantiles (new Quantile []{});
31
- assertEquals (Double .NaN , ckms .get (0 ), 0 );
32
- }
33
-
34
- @ Test
35
- public void testInsertWhenNoQuantilesAreDefined () {
36
- CKMSQuantiles ckms = new CKMSQuantiles (new Quantile []{});
37
- ckms .insert (1.0 );
38
- ckms .insert (2.0 );
39
- ckms .insert (3.0 );
40
- assertEquals (1.0 , ckms .get (0 ), 0 );
41
- assertEquals (2.0 , ckms .get (0.5 ), 0 );
42
- assertEquals (3.0 , ckms .get (1 ), 0 );
43
- }
44
-
45
- @ Test
46
- public void testCompressWhenBufferSize500Reached () {
47
- CKMSQuantiles ckms = new CKMSQuantiles (new Quantile []{});
48
- List <Double > input = makeSequence (1 , 499 );
49
-
50
- for (double v : input ) {
51
- ckms .insert (v );
52
- }
53
- assertEquals ("No compress should be triggered" , 0 , ckms .samples .size ());
54
-
55
- ckms .insert (500 );
56
- assertEquals (500 , ckms .samples .size ());
57
- }
58
-
59
28
@ Test
60
29
public void testGet () {
61
30
List <Quantile > quantiles = new ArrayList <Quantile >();
@@ -80,20 +49,19 @@ public void testGet() {
80
49
@ Test
81
50
public void testGetWithAMillionElements () {
82
51
List <Quantile > quantiles = new ArrayList <Quantile >();
83
- quantiles .add (new Quantile (0.0 , 0.01 ));
52
+ quantiles .add (new Quantile (0.01 , 0.001 ));
84
53
quantiles .add (new Quantile (0.10 , 0.01 ));
85
54
quantiles .add (new Quantile (0.90 , 0.001 ));
86
55
quantiles .add (new Quantile (0.95 , 0.02 ));
87
56
quantiles .add (new Quantile (0.99 , 0.001 ));
88
57
89
58
final int elemCount = 1000000 ;
90
- double [] shuffle = new double [ elemCount ] ;
91
- for (int i = 0 ; i < shuffle . length ; i ++) {
92
- shuffle [ i ] = i + 1 ;
59
+ List < Double > shuffle = new ArrayList < Double >( elemCount ) ;
60
+ for (int i = 0 ; i < elemCount ; i ++) {
61
+ shuffle . add ( i + 1.0 ) ;
93
62
}
94
63
Random rand = new Random (0 );
95
-
96
- Collections .shuffle (Arrays .asList (shuffle ), rand );
64
+ Collections .shuffle (shuffle , rand );
97
65
98
66
CKMSQuantiles ckms = new CKMSQuantiles (
99
67
quantiles .toArray (new Quantile []{}));
@@ -102,14 +70,21 @@ public void testGetWithAMillionElements() {
102
70
ckms .insert (v );
103
71
}
104
72
// given the linear distribution, we set the delta equal to the εn value for this quantile
105
- assertEquals (0.1 * elemCount , ckms .get (0.1 ), 0.01 * elemCount );
106
- assertEquals (0.9 * elemCount , ckms .get (0.9 ), 0.001 * elemCount );
107
- assertEquals (0.95 * elemCount , ckms .get (0.95 ), 0.02 * elemCount );
108
- assertEquals (0.99 * elemCount , ckms .get (0.99 ), 0.001 * elemCount );
73
+ assertRank (elemCount , ckms .get (0.01 ), 0.01 , 0.001 );
74
+ assertRank (elemCount , ckms .get (0.1 ), 0.1 , 0.01 );
75
+ assertRank (elemCount , ckms .get (0.9 ), 0.9 , 0.001 );
76
+ assertRank (elemCount , ckms .get (0.95 ), 0.95 , 0.02 );
77
+ assertRank (elemCount , ckms .get (0.99 ), 0.99 , 0.001 );
109
78
110
79
assertTrue ("sample size should be way below 1_000_000" , ckms .samples .size () < 1000 );
111
80
}
112
81
82
+ private void assertRank (int elemCount , double actual , double quantile , double epsilon ) {
83
+ double lowerBound = elemCount * (quantile - epsilon );
84
+ double upperBound = elemCount * (quantile + epsilon );
85
+ assertTrue ("quantile=" + quantile + ", actual=" + actual + ", lowerBound=" + lowerBound , actual >= lowerBound );
86
+ assertTrue ("quantile=" + quantile + ", actual=" + actual + ", upperBound=" + upperBound , actual <= upperBound );
87
+ }
113
88
114
89
@ Test
115
90
public void testGetGaussian () {
0 commit comments