@@ -25,37 +25,6 @@ public void testGetOnEmptyValues() {
2525 assertEquals (Double .NaN , ckms .get (0 ), 0 );
2626 }
2727
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-
5928 @ Test
6029 public void testGet () {
6130 List <Quantile > quantiles = new ArrayList <Quantile >();
@@ -80,20 +49,19 @@ public void testGet() {
8049 @ Test
8150 public void testGetWithAMillionElements () {
8251 List <Quantile > quantiles = new ArrayList <Quantile >();
83- quantiles .add (new Quantile (0.0 , 0.01 ));
52+ quantiles .add (new Quantile (0.01 , 0.001 ));
8453 quantiles .add (new Quantile (0.10 , 0.01 ));
8554 quantiles .add (new Quantile (0.90 , 0.001 ));
8655 quantiles .add (new Quantile (0.95 , 0.02 ));
8756 quantiles .add (new Quantile (0.99 , 0.001 ));
8857
8958 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 ) ;
9362 }
9463 Random rand = new Random (0 );
95-
96- Collections .shuffle (Arrays .asList (shuffle ), rand );
64+ Collections .shuffle (shuffle , rand );
9765
9866 CKMSQuantiles ckms = new CKMSQuantiles (
9967 quantiles .toArray (new Quantile []{}));
@@ -102,14 +70,21 @@ public void testGetWithAMillionElements() {
10270 ckms .insert (v );
10371 }
10472 // 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 );
10978
11079 assertTrue ("sample size should be way below 1_000_000" , ckms .samples .size () < 1000 );
11180 }
11281
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+ }
11388
11489 @ Test
11590 public void testGetGaussian () {
0 commit comments