2525import org .apache .commons .numbers .core .Precision ;
2626import org .junit .Assert ;
2727import org .junit .Test ;
28+ import org .junit .jupiter .api .Assertions ;
2829
2930/**
3031 * Test cases for the {@link StatUtils} class.
@@ -108,6 +109,41 @@ public void testArrayIndexConditions() {
108109 }
109110 }
110111
112+ @ Test
113+ public void testSum () {
114+ double [] x = null ;
115+
116+ // test null
117+ try {
118+ StatUtils .sum (x );
119+ Assert .fail ("null is not a valid data array." );
120+ } catch (NullArgumentException ex ) {
121+ // success
122+ }
123+
124+ try {
125+ StatUtils .sum (x , 0 , 4 );
126+ Assert .fail ("null is not a valid data array." );
127+ } catch (NullArgumentException ex ) {
128+ // success
129+ }
130+
131+ // test empty
132+ x = new double [] {};
133+ TestUtils .assertEquals (Double .NaN , StatUtils .sum (x ), TOLERANCE );
134+ TestUtils .assertEquals (Double .NaN , StatUtils .sum (x , 0 , 0 ), TOLERANCE );
135+
136+ // test one
137+ x = new double [] {TWO };
138+ TestUtils .assertEquals (2 , StatUtils .sum (x ), TOLERANCE );
139+ TestUtils .assertEquals (2 , StatUtils .sum (x , 0 , 1 ), TOLERANCE );
140+
141+ // test many
142+ x = new double [] {ONE , TWO , TWO , THREE };
143+ TestUtils .assertEquals (8 , StatUtils .sum (x ), TOLERANCE );
144+ TestUtils .assertEquals (4 , StatUtils .sum (x , 1 , 2 ), TOLERANCE );
145+ }
146+
111147 @ Test
112148 public void testSumSq () {
113149 double [] x = null ;
@@ -226,14 +262,17 @@ public void testMean() {
226262
227263 // test empty
228264 x = new double [] {};
265+ TestUtils .assertEquals (Double .NaN , StatUtils .mean (x ), TOLERANCE );
229266 TestUtils .assertEquals (Double .NaN , StatUtils .mean (x , 0 , 0 ), TOLERANCE );
230267
231268 // test one
232269 x = new double [] {TWO };
270+ TestUtils .assertEquals (TWO , StatUtils .mean (x ), TOLERANCE );
233271 TestUtils .assertEquals (TWO , StatUtils .mean (x , 0 , 1 ), TOLERANCE );
234272
235273 // test many
236274 x = new double [] {ONE , TWO , TWO , THREE };
275+ TestUtils .assertEquals (2 , StatUtils .mean (x ), TOLERANCE );
237276 TestUtils .assertEquals (2.5 , StatUtils .mean (x , 2 , 2 ), TOLERANCE );
238277 }
239278
@@ -250,14 +289,17 @@ public void testVariance() {
250289
251290 // test empty
252291 x = new double [] {};
292+ TestUtils .assertEquals (Double .NaN , StatUtils .variance (x ), TOLERANCE );
253293 TestUtils .assertEquals (Double .NaN , StatUtils .variance (x , 0 , 0 ), TOLERANCE );
254294
255295 // test one
256296 x = new double [] {TWO };
297+ TestUtils .assertEquals (0.0 , StatUtils .variance (x ), TOLERANCE );
257298 TestUtils .assertEquals (0.0 , StatUtils .variance (x , 0 , 1 ), TOLERANCE );
258299
259300 // test many
260301 x = new double [] {ONE , TWO , TWO , THREE };
302+ TestUtils .assertEquals (2.0 / 3 , StatUtils .variance (x ), TOLERANCE );
261303 TestUtils .assertEquals (0.5 , StatUtils .variance (x , 2 , 2 ), TOLERANCE );
262304 }
263305
@@ -274,14 +316,17 @@ public void testPopulationVariance() {
274316
275317 // test empty
276318 x = new double [] {};
319+ TestUtils .assertEquals (Double .NaN , StatUtils .populationVariance (x ), TOLERANCE );
277320 TestUtils .assertEquals (Double .NaN , StatUtils .populationVariance (x , 0 , 0 ), TOLERANCE );
278321
279322 // test one
280323 x = new double [] {TWO };
281324 TestUtils .assertEquals (0.0 , StatUtils .populationVariance (x , 0 , 1 ), TOLERANCE );
325+ TestUtils .assertEquals (0.0 , StatUtils .populationVariance (x , 0 , 1 ), TOLERANCE );
282326
283327 // test many
284328 x = new double [] {ONE , TWO , TWO , THREE };
329+ TestUtils .assertEquals (0.5 , StatUtils .populationVariance (x ), TOLERANCE );
285330 TestUtils .assertEquals (0.25 , StatUtils .populationVariance (x , 0 , 2 ), TOLERANCE );
286331 }
287332
@@ -299,14 +344,17 @@ public void testMax() {
299344
300345 // test empty
301346 x = new double [] {};
347+ TestUtils .assertEquals (Double .NaN , StatUtils .max (x ), TOLERANCE );
302348 TestUtils .assertEquals (Double .NaN , StatUtils .max (x , 0 , 0 ), TOLERANCE );
303349
304350 // test one
305351 x = new double [] {TWO };
352+ TestUtils .assertEquals (TWO , StatUtils .max (x ), TOLERANCE );
306353 TestUtils .assertEquals (TWO , StatUtils .max (x , 0 , 1 ), TOLERANCE );
307354
308355 // test many
309356 x = new double [] {ONE , TWO , TWO , THREE };
357+ TestUtils .assertEquals (THREE , StatUtils .max (x ), TOLERANCE );
310358 TestUtils .assertEquals (THREE , StatUtils .max (x , 1 , 3 ), TOLERANCE );
311359
312360 // Legacy behaviour
@@ -341,14 +389,17 @@ public void testMin() {
341389
342390 // test empty
343391 x = new double [] {};
392+ TestUtils .assertEquals (Double .NaN , StatUtils .min (x ), TOLERANCE );
344393 TestUtils .assertEquals (Double .NaN , StatUtils .min (x , 0 , 0 ), TOLERANCE );
345394
346395 // test one
347396 x = new double [] {TWO };
397+ TestUtils .assertEquals (TWO , StatUtils .min (x ), TOLERANCE );
348398 TestUtils .assertEquals (TWO , StatUtils .min (x , 0 , 1 ), TOLERANCE );
349399
350400 // test many
351401 x = new double [] {ONE , TWO , TWO , THREE };
402+ TestUtils .assertEquals (ONE , StatUtils .min (x ), TOLERANCE );
352403 TestUtils .assertEquals (TWO , StatUtils .min (x , 1 , 3 ), TOLERANCE );
353404
354405 // Legacy behaviour
@@ -422,6 +473,13 @@ public void testDifferenceStats() {
422473 } catch (MathIllegalArgumentException ex ) {
423474 // expected
424475 }
476+ try {
477+ double [] empty = {};
478+ StatUtils .meanDifference (empty , empty );
479+ Assert .fail ("Expecting MathIllegalArgumentException" );
480+ } catch (MathIllegalArgumentException ex ) {
481+ // expected
482+ }
425483 try {
426484 StatUtils .varianceDifference (sample1 , small , meanDifference );
427485 Assert .fail ("Expecting MathIllegalArgumentException" );
@@ -539,5 +597,15 @@ public void testMode() {
539597 } catch (NullArgumentException ex ) {
540598 // Expected
541599 }
600+
601+ // Range tests
602+ Assertions .assertArrayEquals (new double [] {0 }, StatUtils .mode (singleMode , 0 , 4 ));
603+ Assertions .assertArrayEquals (new double [] {0 , 2 , 7 , 11 }, StatUtils .mode (singleMode , 2 , 4 ));
604+ Assertions .assertArrayEquals (new double [] {0 }, StatUtils .mode (twoMode , 0 , 4 ));
605+ Assertions .assertArrayEquals (new double [] {0 , 2 }, StatUtils .mode (twoMode , 0 , 5 ));
606+ Assertions .assertThrows (NullArgumentException .class , () -> StatUtils .mode (null , 0 , 5 ));
607+ Assertions .assertThrows (MathIllegalArgumentException .class , () -> StatUtils .mode (singleMode , -1 , 1 ));
608+ Assertions .assertThrows (MathIllegalArgumentException .class , () -> StatUtils .mode (singleMode , 0 , -1 ));
609+ Assertions .assertThrows (MathIllegalArgumentException .class , () -> StatUtils .mode (singleMode , 0 , 100 ));
542610 }
543611}
0 commit comments