    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
    17  package org.apache.commons.math.distribution;
    18
    19  /***
    20   * Test cases for HyperGeometriclDistribution.
    21   * Extends IntegerDistributionAbstractTest.  See class javadoc for
    22   * IntegerDistributionAbstractTest for details.
    23   *
    24   * @version $Revision: 1.13 $ $Date: 2004/11/07 03:32:49 $
    25   */
    26  public class HypergeometricDistributionTest extends IntegerDistributionAbstractTest {
    27
    28      /***
    29       * Constructor for ChiSquareDistributionTest.
    30       * @param name
    31       */
    32      public HypergeometricDistributionTest(String name) {
    33          super(name);
    34      }
    35
    36  //-------------- Implementations for abstract methods -----------------------
    37
    38      /*** Creates the default discrete distribution instance to use in tests. */
    39      public IntegerDistribution makeDistribution() {
    40          return DistributionFactory.newInstance().createHypergeometricDistribution(10,5, 5);
    41      }
    42
    43      /*** Creates the default probability density test input values */
    44      public int[] makeDensityTestPoints() {
    45          return new int[] {-1, 0, 1, 2, 3, 4, 5, 10};
    46      }
    47
    48      /*** Creates the default probability density test expected values */
    49      public double[] makeDensityTestValues() {
    50          return new double[] {0d, 0.003968d, 0.099206d, 0.396825d, 0.396825d,
    51                  0.099206d, 0.003968d, 0d};
    52      }
    53
    54      /*** Creates the default cumulative probability density test input values */
    55      public int[] makeCumulativeTestPoints() {
    56          return makeDensityTestPoints();
    57      }
    58
    59      /*** Creates the default cumulative probability density test expected values */
    60      public double[] makeCumulativeTestValues() {
    61          return new double[] {0d, .003968d, .103175d, .50000d, .896825d, .996032d,
    62                  1.00000d, 1d};
    63      }
    64
    65      /*** Creates the default inverse cumulative probability test input values */
    66      public double[] makeInverseCumulativeTestPoints() {
    67          return new double[] {0d, 0.001d, 0.010d, 0.025d, 0.050d, 0.100d, 0.999d,
    68                  0.990d, 0.975d, 0.950d, 0.900d, 1d};
    69      }
    70
    71      /*** Creates the default inverse cumulative probability density test expected values */
    72      public int[] makeInverseCumulativeTestValues() {
    73          return new int[] {-1, -1, 0, 0, 0, 0, 4, 3, 3, 3, 3, 5};
    74      }
    75
    76      //-------------------- Additional test cases ------------------------------
    77
    78      /*** Verify that if there are no failures, mass is concentrated on sampleSize */
    79      public void testDegenerateNoFailures() throws Exception {
    80          setDistribution(DistributionFactory.newInstance().createHypergeometricDistribution(5,5,3));
    81          setCumulativeTestPoints(new int[] {-1, 0, 1, 3, 10 });
    82          setCumulativeTestValues(new double[] {0d, 0d, 0d, 1d, 1d});
    83          setDensityTestPoints(new int[] {-1, 0, 1, 3, 10});
    84          setDensityTestValues(new double[] {0d, 0d, 0d, 1d, 0d});
    85          setInverseCumulativeTestPoints(new double[] {0.1d, 0.5d});
    86          setInverseCumulativeTestValues(new int[] {2, 2});
    87          verifyDensities();
    88          verifyCumulativeProbabilities();
    89          verifyInverseCumulativeProbabilities();
    90      }
    91
    92      /*** Verify that if there are no successes, mass is concentrated on 0 */
    93      public void testDegenerateNoSuccesses() throws Exception {
    94          setDistribution(DistributionFactory.newInstance().createHypergeometricDistribution(5,0,3));
    95          setCumulativeTestPoints(new int[] {-1, 0, 1, 3, 10 });
    96          setCumulativeTestValues(new double[] {0d, 1d, 1d, 1d, 1d});
    97          setDensityTestPoints(new int[] {-1, 0, 1, 3, 10});
    98          setDensityTestValues(new double[] {0d, 1d, 0d, 0d, 0d});
    99          setInverseCumulativeTestPoints(new double[] {0.1d, 0.5d});
    100         setInverseCumulativeTestValues(new int[] {-1, -1});
    101         verifyDensities();
    102         verifyCumulativeProbabilities();
    103         verifyInverseCumulativeProbabilities();
    104     }
    105
    106     /*** Verify that if sampleSize = populationSize, mass is concentrated on numberOfSuccesses */
    107     public void testDegenerateFullSample() throws Exception {
    108         setDistribution(DistributionFactory.newInstance().createHypergeometricDistribution(5,3,5));
    109         setCumulativeTestPoints(new int[] {-1, 0, 1, 3, 10 });
    110         setCumulativeTestValues(new double[] {0d, 0d, 0d, 1d, 1d});
    111         setDensityTestPoints(new int[] {-1, 0, 1, 3, 10});
    112         setDensityTestValues(new double[] {0d, 0d, 0d, 1d, 0d});
    113         setInverseCumulativeTestPoints(new double[] {0.1d, 0.5d});
    114         setInverseCumulativeTestValues(new int[] {2, 2});
    115         verifyDensities();
    116         verifyCumulativeProbabilities();
    117         verifyInverseCumulativeProbabilities();
    118     }
    119
    120 }