    1   /*
    2    * Copyright 2003-2004 The Apache Software Foundation.
    3    *
    4    * Licensed under the Apache License, Version 2.0 (the "License");
    5    * you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at
    7    *
    8    *      http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  package org.apache.commons.math.stat.descriptive.moment;
    17
    18  import junit.framework.Test;
    19  import junit.framework.TestSuite;
    20
    21  import org.apache.commons.math.stat.descriptive.StorelessUnivariateStatisticAbstractTest;
    22  import org.apache.commons.math.stat.descriptive.UnivariateStatistic;
    23
    24  /***
    25   * Test cases for the {@link UnivariateStatistic} class.
    26   * @version $Revision: 1.1 $ $Date: 2004/10/08 05:08:20 $
    27   */
    28  public class GeometricMeanTest extends StorelessUnivariateStatisticAbstractTest{
    29
    30      protected GeometricMean stat;
    31
    32      /***
    33       * @param name
    34       */
    35      public GeometricMeanTest(String name) {
    36          super(name);
    37      }
    38
    39      public static Test suite() {
    40          TestSuite suite = new TestSuite(GeometricMeanTest.class);
    41          suite.setName("Mean  Tests");
    42          return suite;
    43      }
    44
    45      /* (non-Javadoc)
    46       * @see org.apache.commons.math.stat.descriptive.UnivariateStatisticAbstractTest#getUnivariateStatistic()
    47       */
    48      public UnivariateStatistic getUnivariateStatistic() {
    49          return new GeometricMean();
    50      }
    51
    52      /* (non-Javadoc)
    53       * @see org.apache.commons.math.stat.descriptive.UnivariateStatisticAbstractTest#expectedValue()
    54       */
    55      public double expectedValue() {
    56          return this.geoMean;
    57      }
    58
    59      public void testSpecialValues() {
    60          GeometricMean mean = new GeometricMean();
    61          // empty
    62          assertTrue(Double.isNaN(mean.getResult()));
    63
    64          // finite data
    65          mean.increment(1d);
    66          assertFalse(Double.isNaN(mean.getResult()));
    67
    68          // add 0 -- makes log sum blow to minus infinity, should make 0
    69          mean.increment(0d);
    70          assertEquals(0d, mean.getResult(), 0);
    71
    72          // add positive infinity - note the minus infinity above
    73          mean.increment(Double.POSITIVE_INFINITY);
    74          assertTrue(Double.isNaN(mean.getResult()));
    75
    76          // clear
    77          mean.clear();
    78          assertTrue(Double.isNaN(mean.getResult()));
    79
    80          // positive infinity by itself
    81          mean.increment(Double.POSITIVE_INFINITY);
    82          assertEquals(Double.POSITIVE_INFINITY, mean.getResult(), 0);
    83
    84          // negative value -- should make NaN
    85          mean.increment(-2d);
    86          assertTrue(Double.isNaN(mean.getResult()));
    87      }
    88
    89  }