/* * 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. * */ package org.apache.jorphan.math; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Map; import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; public class TestStatCalculator { private StatCalculatorLong calc; @Before public void setUp() { calc = new StatCalculatorLong(); } @Test public void testPercentagePoint() throws Exception { long values[] = new long[] { 10L,9L,5L,6L,1L,3L,8L,2L,7L,4L }; for (long l : values) { calc.addValue(l); } assertEquals(10, calc.getCount()); assertEquals(9, calc.getPercentPoint(0.8999999).intValue()); } @Test @Ignore // Disabled due to in progress Bug 61071 public void testPercentagePointBug() throws Exception { long values[] = new long[] { 10L,9L,5L,6L,1L,3L,8L,2L,7L,4L }; DescriptiveStatistics statistics = new DescriptiveStatistics(); for (long l : values) { calc.addValue(l); statistics.addValue(l); } assertEquals(9, calc.getPercentPoint(0.8999999).intValue()); // assertEquals(Math.round(statistics.getPercentile(90)), calc.getPercentPoint(0.9).intValue()); } @Test public void testCalculation() { assertEquals(Long.MIN_VALUE, calc.getMax().longValue()); assertEquals(Long.MAX_VALUE, calc.getMin().longValue()); calc.addValue(18); calc.addValue(10); calc.addValue(9); calc.addValue(11); calc.addValue(28); calc.addValue(3); calc.addValue(30); calc.addValue(15); calc.addValue(15); calc.addValue(21); assertEquals(16, (int) calc.getMean()); assertEquals(8.0622577F, (float) calc.getStandardDeviation(), 0F); assertEquals(30, calc.getMax().intValue()); assertEquals(3, calc.getMin().intValue()); assertEquals(15, calc.getMedian().intValue()); } @Test @Ignore // Disabled due to in progress Bug 61071 public void testMedianBug61071() { long[] values = new long[] { 10L, 20L, 30L, 40L, 50L, 60L, 80L, 90L }; DescriptiveStatistics statistics = new DescriptiveStatistics(); for (long l : values) { calc.addValue(l); statistics.addValue(l); } assertEquals((int) statistics.getPercentile(50), calc.getMedian().intValue()); } @Test public void testLong(){ calc.addValue(0L); calc.addValue(2L); calc.addValue(2L); final Long long0 = Long.valueOf(0); final Long long2 = Long.valueOf(2); assertEquals(long2,calc.getMax()); assertEquals(long0,calc.getMin()); Map<Number, Number[]> map = calc.getDistribution(); assertTrue(map.containsKey(long0)); assertTrue(map.containsKey(long2)); } @Test public void testInteger(){ StatCalculatorInteger calci = new StatCalculatorInteger(); assertEquals(Integer.MIN_VALUE, calci.getMax().intValue()); assertEquals(Integer.MAX_VALUE, calci.getMin().intValue()); calci.addValue(0); calci.addValue(2); calci.addValue(2); assertEquals(Integer.valueOf(2),calci.getMax()); assertEquals(Integer.valueOf(0),calci.getMin()); Map<Number, Number[]> map = calci.getDistribution(); assertTrue(map.containsKey(Integer.valueOf(0))); assertTrue(map.containsKey(Integer.valueOf(2))); } @Test public void testBug52125_1(){ // No duplicates when adding calc.addValue(1L); calc.addValue(2L); calc.addValue(3L); calc.addValue(2L); calc.addValue(2L); calc.addValue(2L); assertEquals(6, calc.getCount()); assertEquals(12.0, calc.getSum(), 0.000000000001); assertEquals(0.5773502691896255, calc.getStandardDeviation(), 0.000000000000001); } @Test @SuppressWarnings("boxing") public void testBug52125_2(){ // add duplicates calc.addValue(1L); calc.addValue(2L); calc.addValue(3L); calc.addEachValue(2L, 3); assertEquals(6, calc.getCount()); assertEquals(12.0, calc.getSum(), 0.000000000001); assertEquals(0.5773502691896255, calc.getStandardDeviation(), 0.000000000000001); } @Test public void testBug52125_2A(){ // as above, but with aggregate sample instead calc.addValue(1L); calc.addValue(2L); calc.addValue(3L); calc.addValue(6L, 3); assertEquals(6, calc.getCount()); assertEquals(12.0, calc.getSum(), 0.00000001); assertEquals(0.5773502691896255, calc.getStandardDeviation(), 0.000000000000001); } @Test public void testBug52125_3(){ // add duplicates as per bug calc.addValue(1L); calc.addValue(2L); calc.addValue(3L); StatCalculatorLong calc2 = new StatCalculatorLong(); calc2.addValue(2L); calc2.addValue(2L); calc2.addValue(2L); calc.addAll(calc2); assertEquals(6, calc.getCount()); assertEquals(12.0, calc.getSum(), 0.000000000001); assertEquals(0.5773502691896255, calc.getStandardDeviation(), 0.000000000000001); } }