You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2013/11/06 18:12:14 UTC

svn commit: r1539401 - /poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestPercentile.java

Author: cedricwalter
Date: Wed Nov  6 17:12:13 2013
New Revision: 1539401

URL: http://svn.apache.org/r1539401
Log:
Bug 55724: implementation of excel percentile function, added unit test

Added:
    poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestPercentile.java
      - copied, changed from r1539134, poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestAverage.java

Copied: poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestPercentile.java (from r1539134, poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestAverage.java)
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestPercentile.java?p2=poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestPercentile.java&p1=poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestAverage.java&r1=1539134&r2=1539401&rev=1539401&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestAverage.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestPercentile.java Wed Nov  6 17:12:13 2013
@@ -14,85 +14,99 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
+package org.apache.poi.ss.formula.atp;
 
-package org.apache.poi.ss.formula.functions;
-
-import junit.framework.TestCase;
-
+import org.apache.poi.ss.formula.eval.AreaEval;
 import org.apache.poi.ss.formula.eval.BlankEval;
 import org.apache.poi.ss.formula.eval.BoolEval;
 import org.apache.poi.ss.formula.eval.ErrorEval;
 import org.apache.poi.ss.formula.eval.NumberEval;
 import org.apache.poi.ss.formula.eval.ValueEval;
+import org.apache.poi.ss.formula.functions.AggregateFunction;
+import org.apache.poi.ss.formula.functions.EvalFactory;
+
+import junit.framework.TestCase;
+
 /**
- * Tests for Excel function AVERAGE()
+ * Testcase for Excel function PERCENTILE()
  *
- * @author Josh Micich
+ * @author T. Gordon
  */
-public final class TestAverage extends TestCase {
+public class TestPercentile extends TestCase {
 
-	private static ValueEval invokeAverage(ValueEval[] args) {
-		return AggregateFunction.AVERAGE.evaluate(args, -1, (short)-1);
-	}
-
-	private void confirmAverage(ValueEval[] args, double expected) {
-		ValueEval result = invokeAverage(args);
-		assertEquals(NumberEval.class, result.getClass());
-		assertEquals(expected, ((NumberEval)result).getNumberValue(), 0);
-	}
-
-	private void confirmAverage(ValueEval[] args, ErrorEval expectedError) {
-		ValueEval result = invokeAverage(args);
-		assertEquals(ErrorEval.class, result.getClass());
-		assertEquals(expectedError.getErrorCode(), ((ErrorEval)result).getErrorCode());
-	}
-
-	public void testBasic() {
-
-		ValueEval[] values = {
-				new NumberEval(1),
-				new NumberEval(2),
-				new NumberEval(3),
-				new NumberEval(4),
-		};
-
-		confirmAverage(values, 2.5);
-
-		values = new ValueEval[] {
-				new NumberEval(1),
-				new NumberEval(2),
-				BlankEval.instance,
-				new NumberEval(3),
-				BlankEval.instance,
-				new NumberEval(4),
-				BlankEval.instance,
-		};
-
-		confirmAverage(values, 2.5);
-	}
-
-	/**
-	 * Valid cases where values are not pure numbers
-	 */
-	public void testUnusualArgs() {
-		ValueEval[] values = {
-				new NumberEval(1),
-				new NumberEval(2),
-				BoolEval.TRUE,
-				BoolEval.FALSE,
-		};
-
-		confirmAverage(values, 1.0);
-
-	}
-
-	public void testErrors() {
-		ValueEval[] values = {
-				new NumberEval(1),
-				ErrorEval.NAME_INVALID,
-				new NumberEval(3),
-				ErrorEval.DIV_ZERO,
-		};
-		confirmAverage(values, ErrorEval.NAME_INVALID);
-	}
+    public void testPercentile() {
+        testBasic();
+        testUnusualArgs();
+        testUnusualArgs2();
+        testUnusualArgs3();
+        testErrors();
+        testErrors2();
+    }
+
+    private static ValueEval invokePercentile(ValueEval[] args, ValueEval percentile) {
+        AreaEval aeA = EvalFactory.createAreaEval("A1:A" + args.length, args);
+        ValueEval[] args2 = { aeA, percentile };
+        return AggregateFunction.PERCENTILE.evaluate(args2, -1, -1);
+    }
+
+    private void confirmPercentile(ValueEval percentile, ValueEval[] args, double expected) {
+        ValueEval result = invokePercentile(args, percentile);
+        assertEquals(NumberEval.class, result.getClass());
+        double delta = 0.00000001;
+        assertEquals(expected, ((NumberEval) result).getNumberValue(), delta);
+    }
+
+    private void confirmPercentile(ValueEval percentile, ValueEval[] args, ErrorEval expectedError) {
+        ValueEval result = invokePercentile(args, percentile);
+        assertEquals(ErrorEval.class, result.getClass());
+        assertEquals(expectedError.getErrorCode(), ((ErrorEval) result).getErrorCode());
+    }
+
+    public void testBasic() {
+        ValueEval[] values = { new NumberEval(210.128), new NumberEval(65.2182), new NumberEval(32.231),
+                new NumberEval(12.123), new NumberEval(45.32) };
+        ValueEval percentile = new NumberEval(0.95);
+        confirmPercentile(percentile, values, 181.14604);
+    }
+
+    public void testBlanks() {
+        ValueEval[] values = { new NumberEval(210.128), new NumberEval(65.2182), new NumberEval(32.231),
+                BlankEval.instance, new NumberEval(45.32) };
+        ValueEval percentile = new NumberEval(0.95);
+        confirmPercentile(percentile, values, 188.39153);
+    }
+
+    public void testUnusualArgs() {
+        ValueEval[] values = { new NumberEval(1), new NumberEval(2), BoolEval.TRUE, BoolEval.FALSE };
+        ValueEval percentile = new NumberEval(0.95);
+        confirmPercentile(percentile, values, 1.95);
+    }
+
+    //percentile has to be between 0 and 1 - here we test less than zero
+    public void testUnusualArgs2() {
+        ValueEval[] values = { new NumberEval(1), new NumberEval(2), };
+        ValueEval percentile = new NumberEval(-0.1);
+        confirmPercentile(percentile, values, ErrorEval.NUM_ERROR);
+    }
+
+    //percentile has to be between 0 and 1 - here we test more than 1
+    public void testUnusualArgs3() {
+        ValueEval[] values = { new NumberEval(1), new NumberEval(2) };
+        ValueEval percentile = new NumberEval(1.1);
+        confirmPercentile(percentile, values, ErrorEval.NUM_ERROR);
+    }
+
+    //here we test where there are errors as part of inputs
+    public void testErrors() {
+        ValueEval[] values = { new NumberEval(1), ErrorEval.NAME_INVALID, new NumberEval(3), ErrorEval.DIV_ZERO, };
+        ValueEval percentile = new NumberEval(0.95);
+        confirmPercentile(percentile, values, ErrorEval.NAME_INVALID);
+    }
+
+    //here we test where there are errors as part of inputs
+    public void testErrors2() {
+        ValueEval[] values = { new NumberEval(1), new NumberEval(2), new NumberEval(3), ErrorEval.DIV_ZERO, };
+        ValueEval percentile = new NumberEval(0.95);
+        confirmPercentile(percentile, values, ErrorEval.DIV_ZERO);
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org