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 ExponentialDistribution. 021 * Extends ContinuousDistributionAbstractTest. See class javadoc for 022 * ContinuousDistributionAbstractTest for details. 023 * 024 * @version $Revision: 764769 $ $Date: 2009-04-14 09:13:54 -0400 (Tue, 14 Apr 2009) $ 025 */ 026 public class ExponentialDistributionTest extends ContinuousDistributionAbstractTest { 027 028 /** 029 * Constructor for ExponentialDistributionTest. 030 * @param name 031 */ 032 public ExponentialDistributionTest(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 ExponentialDistributionImpl(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[] {0.005002502d, 0.05025168d, 0.1265890d, 0.2564665d, 0.5268026d, 049 34.53878d, 23.02585d, 18.44440d, 14.97866d, 11.51293d}; 050 } 051 052 /** Creates the default cumulative probability density test expected values */ 053 @Override 054 public double[] makeCumulativeTestValues() { 055 return new double[] {0.001d, 0.01d, 0.025d, 0.05d, 0.1d, 0.999d, 056 0.990d, 0.975d, 0.950d, 0.900d}; 057 } 058 059 //------------ Additional tests ------------------------------------------- 060 061 public void testCumulativeProbabilityExtremes() throws Exception { 062 setCumulativeTestPoints(new double[] {-2, 0}); 063 setCumulativeTestValues(new double[] {0, 0}); 064 verifyCumulativeProbabilities(); 065 } 066 067 public void testInverseCumulativeProbabilityExtremes() throws Exception { 068 setInverseCumulativeTestPoints(new double[] {0, 1}); 069 setInverseCumulativeTestValues(new double[] {0, Double.POSITIVE_INFINITY}); 070 verifyInverseCumulativeProbabilities(); 071 } 072 073 public void testCumulativeProbability2() throws Exception { 074 double actual = getDistribution().cumulativeProbability(0.25, 0.75); 075 assertEquals(0.0905214, actual, 10e-4); 076 } 077 078 public void testDensity() { 079 ExponentialDistribution d1 = new ExponentialDistributionImpl(1); 080 assertEquals(0.0, d1.density(-1e-9)); 081 assertEquals(1.0, d1.density(0.0)); 082 assertEquals(0.0, d1.density(1000.0)); 083 assertEquals(Math.exp(-1), d1.density(1.0)); 084 assertEquals(Math.exp(-2), d1.density(2.0)); 085 086 ExponentialDistribution d2 = new ExponentialDistributionImpl(3); 087 assertEquals(1/3.0, d2.density(0.0)); 088 // computed using print(dexp(1, rate=1/3), digits=10) in R 2.5 089 assertEquals(0.2388437702, d2.density(1.0), 1e-8); 090 091 // computed using print(dexp(2, rate=1/3), digits=10) in R 2.5 092 assertEquals(0.1711390397, d2.density(2.0), 1e-8); 093 } 094 095 public void testMeanAccessors() { 096 ExponentialDistribution distribution = (ExponentialDistribution) getDistribution(); 097 assertEquals(5d, distribution.getMean(), Double.MIN_VALUE); 098 distribution.setMean(2d); 099 assertEquals(2d, distribution.getMean(), Double.MIN_VALUE); 100 try { 101 distribution.setMean(0); 102 fail("Expecting IllegalArgumentException for 0 mean"); 103 } catch (IllegalArgumentException ex) { 104 // expected 105 } 106 } 107 108 }