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.distribution;
018
019 /**
020 * Test cases for TDistribution.
021 * Extends ContinuousDistributionAbstractTest. See class javadoc for
022 * ContinuousDistributionAbstractTest for details.
023 *
024 * @version $Revision: 762087 $ $Date: 2009-04-05 10:20:18 -0400 (Sun, 05 Apr 2009) $
025 */
026 public class TDistributionTest extends ContinuousDistributionAbstractTest {
027
028 /**
029 * Constructor for TDistributionTest.
030 * @param name
031 */
032 public TDistributionTest(String name) {
033 super(name);
034 }
035
036 //-------------- Implementations for abstract methods -----------------------
037
038 /** Creates the default continuous distribution instance to use in tests. */
039 @Override
040 public ContinuousDistribution makeDistribution() {
041 return new TDistributionImpl(5.0);
042 }
043
044 /** Creates the default cumulative probability distribution test input values */
045 @Override
046 public double[] makeCumulativeTestPoints() {
047 // quantiles computed using R version 1.8.1 (linux version)
048 return new double[] {-5.89343,-3.36493, -2.570582, -2.015048,
049 -1.475884, 0.0, 5.89343, 3.36493, 2.570582,
050 2.015048, 1.475884};
051 }
052
053 /** Creates the default cumulative probability density test expected values */
054 @Override
055 public double[] makeCumulativeTestValues() {
056 return new double[] {0.001d, 0.01d, 0.025d, 0.05d, 0.1d, 0.5d, 0.999d,
057 0.990d, 0.975d, 0.950d, 0.900d};
058 }
059
060 // --------------------- Override tolerance --------------
061 @Override
062 protected void setUp() throws Exception {
063 super.setUp();
064 setTolerance(1E-6);
065 }
066
067 //---------------------------- Additional test cases -------------------------
068 /**
069 * @see <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=27243">
070 * Bug report that prompted this unit test.</a>
071 */
072 public void testCumulativeProbabilityAgaintStackOverflow() throws Exception {
073 TDistributionImpl td = new TDistributionImpl(5.);
074 td.cumulativeProbability(.1);
075 td.cumulativeProbability(.01);
076 }
077
078 public void testSmallDf() throws Exception {
079 setDistribution(new TDistributionImpl(1d));
080 setTolerance(1E-4);
081 // quantiles computed using R version 1.8.1 (linux version)
082 setCumulativeTestPoints(new double[] {-318.3088, -31.82052, -12.70620, -6.313752,
083 -3.077684, 0.0, 318.3088, 31.82052, 12.70620,
084 6.313752, 3.077684});
085 setInverseCumulativeTestValues(getCumulativeTestPoints());
086 verifyCumulativeProbabilities();
087 verifyInverseCumulativeProbabilities();
088 }
089
090 public void testInverseCumulativeProbabilityExtremes() throws Exception {
091 setInverseCumulativeTestPoints(new double[] {0, 1});
092 setInverseCumulativeTestValues(
093 new double[] {Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY});
094 verifyInverseCumulativeProbabilities();
095 }
096
097 public void testDfAccessors() {
098 TDistribution distribution = (TDistribution) getDistribution();
099 assertEquals(5d, distribution.getDegreesOfFreedom(), Double.MIN_VALUE);
100 distribution.setDegreesOfFreedom(4d);
101 assertEquals(4d, distribution.getDegreesOfFreedom(), Double.MIN_VALUE);
102 try {
103 distribution.setDegreesOfFreedom(0d);
104 fail("Expecting IllegalArgumentException for df = 0");
105 } catch (IllegalArgumentException ex) {
106 // expected
107 }
108 }
109
110 }