/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * Created on May 30, 2005 * */ package org.apache.poi.ss.formula.functions; import junit.framework.AssertionFailedError; import org.apache.poi.ss.formula.eval.ErrorEval; import org.apache.poi.ss.formula.eval.EvaluationException; /** * @author Amol S. Deshmukh < amolweb at ya hoo dot com > * */ public class TestStatsLib extends AbstractNumericTestCase { public void testDevsq() { double[] v = null; double d, x = 0; v = new double[] {1,2,3,4,5,6,7,8,9,10}; d = StatsLib.devsq(v); x = 82.5; assertEquals("devsq ", x, d); v = new double[] {1,1,1,1,1,1,1,1,1,1}; d = StatsLib.devsq(v); x = 0; assertEquals("devsq ", x, d); v = new double[] {0,0,0,0,0,0,0,0,0,0}; d = StatsLib.devsq(v); x = 0; assertEquals("devsq ", x, d); v = new double[] {1,2,1,2,1,2,1,2,1,2}; d = StatsLib.devsq(v); x = 2.5; assertEquals("devsq ", x, d); v = new double[] {123.12,33.3333,2d/3d,5.37828,0.999}; d = StatsLib.devsq(v); x = 10953.7416965767; assertEquals("devsq ", x, d); v = new double[] {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10}; d = StatsLib.devsq(v); x = 82.5; assertEquals("devsq ", x, d); } public void testKthLargest() { double[] v = null; double d, x = 0; v = new double[] {1,2,3,4,5,6,7,8,9,10}; d = StatsLib.kthLargest(v, 3); x = 8; assertEquals("kthLargest ", x, d); v = new double[] {1,1,1,1,1,1,1,1,1,1}; d = StatsLib.kthLargest(v, 3); x = 1; assertEquals("kthLargest ", x, d); v = new double[] {0,0,0,0,0,0,0,0,0,0}; d = StatsLib.kthLargest(v, 3); x = 0; assertEquals("kthLargest ", x, d); v = new double[] {1,2,1,2,1,2,1,2,1,2}; d = StatsLib.kthLargest(v, 3); x = 2; assertEquals("kthLargest ", x, d); v = new double[] {123.12,33.3333,2d/3d,5.37828,0.999}; d = StatsLib.kthLargest(v, 3); x = 5.37828; assertEquals("kthLargest ", x, d); v = new double[] {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10}; d = StatsLib.kthLargest(v, 3); x = -3; assertEquals("kthLargest ", x, d); } public void testKthSmallest() { } public void testAvedev() { double[] v = null; double d, x = 0; v = new double[] {1,2,3,4,5,6,7,8,9,10}; d = StatsLib.avedev(v); x = 2.5; assertEquals("avedev ", x, d); v = new double[] {1,1,1,1,1,1,1,1,1,1}; d = StatsLib.avedev(v); x = 0; assertEquals("avedev ", x, d); v = new double[] {0,0,0,0,0,0,0,0,0,0}; d = StatsLib.avedev(v); x = 0; assertEquals("avedev ", x, d); v = new double[] {1,2,1,2,1,2,1,2,1,2}; d = StatsLib.avedev(v); x = 0.5; assertEquals("avedev ", x, d); v = new double[] {123.12,33.3333,2d/3d,5.37828,0.999}; d = StatsLib.avedev(v); x = 36.42176053333; assertEquals("avedev ", x, d); v = new double[] {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10}; d = StatsLib.avedev(v); x = 2.5; assertEquals("avedev ", x, d); } public void testMedian() { double[] v = null; double d, x = 0; v = new double[] {1,2,3,4,5,6,7,8,9,10}; d = StatsLib.median(v); x = 5.5; assertEquals("median ", x, d); v = new double[] {1,1,1,1,1,1,1,1,1,1}; d = StatsLib.median(v); x = 1; assertEquals("median ", x, d); v = new double[] {0,0,0,0,0,0,0,0,0,0}; d = StatsLib.median(v); x = 0; assertEquals("median ", x, d); v = new double[] {1,2,1,2,1,2,1,2,1,2}; d = StatsLib.median(v); x = 1.5; assertEquals("median ", x, d); v = new double[] {123.12,33.3333,2d/3d,5.37828,0.999}; d = StatsLib.median(v); x = 5.37828; assertEquals("median ", x, d); v = new double[] {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10}; d = StatsLib.median(v); x = -5.5; assertEquals("median ", x, d); v = new double[] {-2,-3,-4,-5,-6,-7,-8,-9,-10}; d = StatsLib.median(v); x = -6; assertEquals("median ", x, d); v = new double[] {1,2,3,4,5,6,7,8,9}; d = StatsLib.median(v); x = 5; assertEquals("median ", x, d); } public void testMode() { double[] v; double d, x = 0; v = new double[] {1,2,3,4,5,6,7,8,9,10}; confirmMode(v, null); v = new double[] {1,1,1,1,1,1,1,1,1,1}; confirmMode(v, 1.0); v = new double[] {0,0,0,0,0,0,0,0,0,0}; confirmMode(v, 0.0); v = new double[] {1,2,1,2,1,2,1,2,1,2}; confirmMode(v, 1.0); v = new double[] {123.12,33.3333,2d/3d,5.37828,0.999}; confirmMode(v, null); v = new double[] {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10}; confirmMode(v, null); v = new double[] {1,2,3,4,1,1,1,1,0,0,0,0,0}; confirmMode(v, 1.0); v = new double[] {0,1,2,3,4,1,1,1,0,0,0,0,1}; confirmMode(v, 0.0); } private static void confirmMode(double[] v, double expectedResult) { confirmMode(v, new Double(expectedResult)); } private static void confirmMode(double[] v, Double expectedResult) { double actual; try { actual = Mode.evaluate(v); if (expectedResult == null) { throw new AssertionFailedError("Expected N/A exception was not thrown"); } } catch (EvaluationException e) { if (expectedResult == null) { assertEquals(ErrorEval.NA, e.getErrorEval()); return; } throw new RuntimeException(e); } assertEquals("mode", expectedResult.doubleValue(), actual); } public void testStddev() { double[] v = null; double d, x = 0; v = new double[] {1,2,3,4,5,6,7,8,9,10}; d = StatsLib.stdev(v); x = 3.02765035410; assertEquals("stdev ", x, d); v = new double[] {1,1,1,1,1,1,1,1,1,1}; d = StatsLib.stdev(v); x = 0; assertEquals("stdev ", x, d); v = new double[] {0,0,0,0,0,0,0,0,0,0}; d = StatsLib.stdev(v); x = 0; assertEquals("stdev ", x, d); v = new double[] {1,2,1,2,1,2,1,2,1,2}; d = StatsLib.stdev(v); x = 0.52704627669; assertEquals("stdev ", x, d); v = new double[] {123.12,33.3333,2d/3d,5.37828,0.999}; d = StatsLib.stdev(v); x = 52.33006233652; assertEquals("stdev ", x, d); v = new double[] {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10}; d = StatsLib.stdev(v); x = 3.02765035410; assertEquals("stdev ", x, d); } public void testVar() { double[] v = null; double d, x = 0; v = new double[] {3.50, 5.00, 7.23, 2.99}; d = StatsLib.var(v); x = 3.6178; assertEquals("var ", x, d); v = new double[] {34.5, 2.0, 8.9, -4.0}; d = StatsLib.var(v); x = 286.99; assertEquals("var ", x, d); v = new double[] {7.0, 25.0, 21.69}; d = StatsLib.var(v); x = 91.79203333; assertEquals("var ", x, d); v = new double[] {1345,1301,1368,1322,1310,1370,1318,1350,1303,1299}; d = StatsLib.var(v); x = 754.2666667; assertEquals("var ", x, d); } public void testVarp() { double[] v = null; double d, x = 0; v = new double[] {3.50, 5.00, 7.23, 2.99}; d = StatsLib.varp(v); x = 2.71335; assertEquals("varp ", x, d); v = new double[] {34.5, 2.0, 8.9, -4.0}; d = StatsLib.varp(v); x = 215.2425; assertEquals("varp ", x, d); v = new double[] {7.0, 25.0, 21.69}; d = StatsLib.varp(v); x = 61.19468889; assertEquals("varp ", x, d); v = new double[] {1345,1301,1368,1322,1310,1370,1318,1350,1303,1299}; d = StatsLib.varp(v); x = 678.84; assertEquals("varp ", x, d); } }