001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.commons.math.stat.descriptive.moment;
018
019 import junit.framework.Test;
020 import junit.framework.TestSuite;
021
022 import org.apache.commons.math.stat.descriptive.StorelessUnivariateStatisticAbstractTest;
023 import org.apache.commons.math.stat.descriptive.UnivariateStatistic;
024
025 /**
026 * Test cases for the {@link UnivariateStatistic} class.
027 * @version $Revision: 762087 $ $Date: 2009-04-05 10:20:18 -0400 (Sun, 05 Apr 2009) $
028 */
029 public class GeometricMeanTest extends StorelessUnivariateStatisticAbstractTest{
030
031 protected GeometricMean stat;
032
033 /**
034 * @param name
035 */
036 public GeometricMeanTest(String name) {
037 super(name);
038 }
039
040 public static Test suite() {
041 TestSuite suite = new TestSuite(GeometricMeanTest.class);
042 suite.setName("Mean Tests");
043 return suite;
044 }
045
046 /**
047 * {@inheritDoc}
048 */
049 @Override
050 public UnivariateStatistic getUnivariateStatistic() {
051 return new GeometricMean();
052 }
053
054 /**
055 * {@inheritDoc}
056 */
057 @Override
058 public double expectedValue() {
059 return this.geoMean;
060 }
061
062 public void testSpecialValues() {
063 GeometricMean mean = new GeometricMean();
064 // empty
065 assertTrue(Double.isNaN(mean.getResult()));
066
067 // finite data
068 mean.increment(1d);
069 assertFalse(Double.isNaN(mean.getResult()));
070
071 // add 0 -- makes log sum blow to minus infinity, should make 0
072 mean.increment(0d);
073 assertEquals(0d, mean.getResult(), 0);
074
075 // add positive infinity - note the minus infinity above
076 mean.increment(Double.POSITIVE_INFINITY);
077 assertTrue(Double.isNaN(mean.getResult()));
078
079 // clear
080 mean.clear();
081 assertTrue(Double.isNaN(mean.getResult()));
082
083 // positive infinity by itself
084 mean.increment(Double.POSITIVE_INFINITY);
085 assertEquals(Double.POSITIVE_INFINITY, mean.getResult(), 0);
086
087 // negative value -- should make NaN
088 mean.increment(-2d);
089 assertTrue(Double.isNaN(mean.getResult()));
090 }
091
092 }