You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by br...@apache.org on 2004/03/18 06:52:37 UTC

cvs commit: jakarta-commons/math/src/test/org/apache/commons/math/stat/data CertifiedDataAbstractTest.java LewTest.java LotteryTest.java Lottery.txt Lew.txt

brentworden    2004/03/17 21:52:37

  Modified:    math/src/test/org/apache/commons/math/stat
                        CertifiedDataTest.java
               math/src/test/org/apache/commons/math TestUtils.java
               math/src/test/org/apache/commons/math/stat/data Lottery.txt
                        Lew.txt
  Added:       math/src/test/org/apache/commons/math/stat/data
                        CertifiedDataAbstractTest.java LewTest.java
                        LotteryTest.java
  Log:
  new approach to testing against certified data sets.
  
  PR: 27692
  Obtained from: Brent Worden
  Submitted by: Brent Worden
  
  Revision  Changes    Path
  1.16      +2 -17     jakarta-commons/math/src/test/org/apache/commons/math/stat/CertifiedDataTest.java
  
  Index: CertifiedDataTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/math/src/test/org/apache/commons/math/stat/CertifiedDataTest.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- CertifiedDataTest.java	21 Feb 2004 21:35:17 -0000	1.15
  +++ CertifiedDataTest.java	18 Mar 2004 05:52:36 -0000	1.16
  @@ -25,6 +25,7 @@
   import java.io.InputStreamReader;
   import org.apache.commons.logging.LogFactory;
   import org.apache.commons.logging.Log;
  +
   /**
    * Test cases for the {@link DescriptiveStatistics} class.
    * @version $Revision$ $Date$
  @@ -75,14 +76,6 @@
   			e.printStackTrace();
   		}
   
  -		loadStats("data/Lew.txt", u);
  -		assertEquals("Lew: std", std, u.getStandardDeviation(), .000000000001);
  -		assertEquals("Lew: mean", mean, u.getMean(), .000000000001);
  -		
  -		loadStats("data/Lottery.txt", u);
  -		assertEquals("Lottery: std", std, u.getStandardDeviation(), .000000000001);
  -		assertEquals("Lottery: mean", mean, u.getMean(), .000000000001);	
  -		
   		loadStats("data/PiDigits.txt", u);
   		assertEquals("PiDigits: std", std, u.getStandardDeviation(), .0000000000001);
   		assertEquals("PiDigits: mean", mean, u.getMean(), .0000000000001);	
  @@ -111,14 +104,6 @@
   
   		DescriptiveStatistics u = DescriptiveStatistics.newInstance();
   		
  -		loadStats("data/Lew.txt", u);
  -		assertEquals("Lew: std", std, u.getStandardDeviation(), .000000000001);
  -		assertEquals("Lew: mean", mean, u.getMean(), .000000000001);
  -		
  -		loadStats("data/Lottery.txt", u);
  -		assertEquals("Lottery: std", std, u.getStandardDeviation(), .000000000001);
  -		assertEquals("Lottery: mean", mean, u.getMean(), .000000000001);		
  -																  
   		loadStats("data/PiDigits.txt", u);
   		assertEquals("PiDigits: std", std, u.getStandardDeviation(), .0000000000001);
   		assertEquals("PiDigits: mean", mean, u.getMean(), .0000000000001);
  
  
  
  1.11      +13 -10    jakarta-commons/math/src/test/org/apache/commons/math/TestUtils.java
  
  Index: TestUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/math/src/test/org/apache/commons/math/TestUtils.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- TestUtils.java	21 Feb 2004 21:35:16 -0000	1.10
  +++ TestUtils.java	18 Mar 2004 05:52:37 -0000	1.11
  @@ -19,14 +19,13 @@
   import java.io.File;
   import java.io.FileInputStream;
   import java.io.FileOutputStream;
  -import java.io.IOException;
   import java.io.ObjectInputStream;
   import java.io.ObjectOutputStream;
   
  -import org.apache.commons.math.complex.Complex;
  -
   import junit.framework.Assert;
   
  +import org.apache.commons.math.complex.Complex;
  +
   /**
    * @version $Revision$ $Date$
    */
  @@ -39,14 +38,18 @@
       }
   
       public static void assertEquals(double expected, double actual, double delta) {
  -        // check for NaN
  -        if(Double.isNaN(expected)){
  -            Assert.assertTrue(Double.isNaN(actual));
  -        } else {
  -            Assert.assertEquals(expected, actual, delta);
  -        }
  +    	assertEquals(null, expected, actual, delta);
       }
   
  +    public static void assertEquals(String msg, double expected, double actual, double delta) {
  +    	// check for NaN
  +    	if(Double.isNaN(expected)){
  +    		Assert.assertTrue(msg, Double.isNaN(actual));
  +    	} else {
  +    		Assert.assertEquals(msg, expected, actual, delta);
  +    	}
  +    }
  +    
       /**
        * 
        */
  
  
  
  1.4       +43 -60    jakarta-commons/math/src/test/org/apache/commons/math/stat/data/Lottery.txt
  
  Index: Lottery.txt
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/math/src/test/org/apache/commons/math/stat/data/Lottery.txt,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Lottery.txt	14 Nov 2003 22:22:20 -0000	1.3
  +++ Lottery.txt	18 Mar 2004 05:52:37 -0000	1.4
  @@ -1,63 +1,46 @@
  -File Name:     Lottery.dat
  -
  -File Format:   ASCII
  -               Header          : lines  1 to  60     (=  60)
  -               Certified Values: lines 41 to  43     (=   3)
  -               Data            : lines 61 to 278     (= 218)
  -
  -Dataset Name:  Lottery
  -
  -Description:   This is an observed/"real world" data set
  -               consisting of 218 lottery values
  -               from September 3, 1989 to April 14, 1990 (32 weeks).
  -               One 3-digit random number (from 000 to 999)
  -               is drawn per day, 7 days per week for most
  -               weeks, but fewer days per week for some weeks.
  -               We here use this data to test accuracy
  -               in summary statistics calculations.
  -
  -Stat Category: Univariate: Summary Statistics
  -
  -Reference:     None
  -
  -Data:          "Real World"
  -               1    Response          : y = 3-digit random number
  -               0    Predictors
  -               218  Observations
  -
  -Model:         Lower Level of Difficulty
  -               2    Parameters        : mu, sigma
  -               1    Response Variable : y
  -               0    Predictor Variables
  -
  -               y    = mu + e
  -
  -
  -
  -
  -
  -
  -                                                  Certified Values
  -Sample Mean                                ybar:  518.958715596330
  -Sample Standard Deviation (denom. = n-1)      s:  291.699727470969
  -Sample Autocorrelation Coefficient (lag 1) r(1):  -0.120948622967393
  -
  -Number of Observations:                             218
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -Data: Y
  -----------
  +#####################################################################
  +# Dataset Name:  Lottery
  +#
  +#Description:   This is an observed/"real world" data set
  +#               consisting of 218 lottery values
  +#               from September 3, 1989 to April 14, 1990 (32 weeks).
  +#               One 3-digit random number (from 000 to 999)
  +#               is drawn per day, 7 days per week for most
  +#               weeks, but fewer days per week for some weeks.
  +#               We here use this data to test accuracy
  +#               in summary statistics calculations.
  +#
  +# Stat Category: Univariate: Summary Statistics
  +#
  +# Reference:     http://www.itl.nist.gov/div898/strd/univ/lottery.html
  +#
  +# Data:          "Real World"
  +#               1    Response          : y = 3-digit random number
  +#               0    Predictors
  +#               218  Observations
  +#
  +# Model:         Lower Level of Difficulty
  +#               2    Parameters        : mu, sigma
  +#               1    Response Variable : y
  +#               0    Predictor Variables#
  +#               y    = mu + e
  +#####################################################################
  +
  +#####################################################################
  +#
  +# Certified Values
  +#
  +#####################################################################
  +mean                       = 518.958715596330
  +standardDeviation          = 291.699727470969
  +autocorrelationCoefficient =  -0.120948622967393
  +n                          = 218
  +
  +#####################################################################
  +#
  +# Data
  +#
  +#####################################################################
        162
        671
        933
  
  
  
  1.4       +52 -60    jakarta-commons/math/src/test/org/apache/commons/math/stat/data/Lew.txt
  
  Index: Lew.txt
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/math/src/test/org/apache/commons/math/stat/data/Lew.txt,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Lew.txt	14 Nov 2003 22:22:20 -0000	1.3
  +++ Lew.txt	18 Mar 2004 05:52:37 -0000	1.4
  @@ -1,63 +1,55 @@
  -File Name:     Lew.dat
  -
  -File Format:   ASCII
  -               Header          : lines  1 to  60     (=  60)
  -               Certified Values: lines 41 to  43     (=   3)
  -               Data            : lines 61 to 260     (= 200)
  -
  -Dataset Name:  Lew (Beam Deflection Data)
  -
  -Description:   This is an observed/"real world" data set
  -               consisting of 200 deflections of a steel-concrete
  -               beam while subjected to periodic pressure.
  -               The experimenter was H. S. Lew of the
  -               Center for Building Technology at NIST.
  -               We here use this data to test accuracy
  -               in summary statistics calculations.
  -
  -Stat Category: Univariate: Summary Statistics
  -
  -Reference:     None
  -
  -Data:          "Real World"
  -               1    Response          : y = beam deflection
  -               0    Predictors
  -               200  Observations
  -
  -Model:         Lower Level of Difficulty
  -               2    Parameters        : mu, sigma
  -               1    Response Variable : y
  -               0    Predictor Variables
  -
  -               y    = mu + e
  -
  -
  -
  -
  -
  -
  -
  -                                                  Certified Values
  -Sample Mean                                ybar:  -177.435000000000
  -Sample Standard Deviation (denom. = n-1)      s:   277.332168044316
  -Sample Autocorrelation Coefficient (lag 1) r(1):  -0.307304800605679
  -
  -Number of Observations:                             200
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -
  -Data: Y
  -----------
  +#####################################################################
  +# Dataset Name:  Lew (Beam Deflection Data)
  +#
  +# Description:   This is an observed/"real world" data set
  +#               consisting of 200 deflections of a steel-concrete
  +#               beam while subjected to periodic pressure.
  +#               The experimenter was H. S. Lew of the
  +#               Center for Building Technology at NIST.
  +#               We here use this data to test accuracy
  +#               in summary statistics calculations.
  +#
  +# Stat Category: Univariate: Summary Statistics
  +#
  +# Reference:     http://www.itl.nist.gov/div898/strd/univ/lew.html
  +#
  +# Data:         "Real World"
  +#               1    Response          : y = beam deflection
  +#               0    Predictors
  +#               200  Observations
  +#
  +# Model:        Lower Level of Difficulty
  +#               2    Parameters        : mu, sigma
  +#               1    Response Variable : y
  +#               0    Predictor Variables
  +#               y    = mu + e
  +#####################################################################
  +
  +#####################################################################
  +#
  +# Certified Values
  +#
  +#####################################################################
  +n                          =  200
  +mean                       = -177.435000000000
  +standardDeviation          =  277.332168044316
  +autocorrelationCoefficient = -0.307304800605679
  +
  +#####################################################################
  +#
  +# R Generated Values
  +#
  +#####################################################################
  +variance =  76913.13143
  +max      =  300
  +min      = -579
  +sum      = -35487
  +
  +#####################################################################
  +#
  +# Data
  +#
  +#####################################################################
       -213
       -564
        -35
  
  
  
  1.1                  jakarta-commons/math/src/test/org/apache/commons/math/stat/data/CertifiedDataAbstractTest.java
  
  Index: CertifiedDataAbstractTest.java
  ===================================================================
  /*
   * Copyright 2003-2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package org.apache.commons.math.stat.data;
  
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  import java.net.URL;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  
  import org.apache.commons.beanutils.PropertyUtils;
  import org.apache.commons.lang.StringUtils;
  import org.apache.commons.math.TestUtils;
  import org.apache.commons.math.stat.DescriptiveStatistics;
  import org.apache.commons.math.stat.SummaryStatistics;
  
  import junit.framework.TestCase;
  
  /**
   * @version $Revision: 1.1 $ $Date: 2004/03/18 05:52:37 $
   */
  public abstract class CertifiedDataAbstractTest extends TestCase {
  	
  	private DescriptiveStatistics descriptives;
  	
  	private SummaryStatistics summaries;
  	
  	private Map certifiedValues;
  	
  	protected void setUp() throws Exception {
  		descriptives = DescriptiveStatistics.newInstance();
  		summaries = SummaryStatistics.newInstance();
  		certifiedValues = new HashMap();
  		
  		loadData();
  	}
  
  	private void loadData() throws IOException {
  		BufferedReader in = null;
  
  		try {
  			URL resourceURL = getClass().getClassLoader().getResource(getResourceName());
  			in = new BufferedReader(new InputStreamReader(resourceURL.openStream()));
  			
  			String line = in.readLine();
  			while (line != null) {
  				line = StringUtils.trimToNull(line);
  				if (line == null) {
  					// empty line
  				} else if (line.startsWith("#")) {
  					// comment
  				} else {
  					int n = line.indexOf('=');
  					if (n == -1) {
  						// data value
  						double value = Double.parseDouble(line);
  						descriptives.addValue(value);
  						summaries.addValue(value);
  					} else {
  						// certified value
  						String name = line.substring(0, n).trim();
  						String valueString = line.substring(n + 1).trim();
  						Double value = new Double(valueString);
  						certifiedValues.put(name, value);
  					}
  				}
  				line = in.readLine();
  			}
  		} finally {
  			if (in != null) {
  				in.close();
  			}
  		}
  	}
  
  	/**
  	 * @return
  	 */
  	protected abstract String getResourceName();
  
  	protected double getMaximumAbsoluteError() {
  		return 1.0e-5;
  	}
  	
  	protected void tearDown() throws Exception {
  		descriptives.clear();
  		descriptives = null;
  		
  		summaries.clear();
  		summaries = null;
  		
  		certifiedValues.clear();
  		certifiedValues = null;
  	}
  	
  	public void testCertifiedValues() throws Exception {
  		Iterator iter = certifiedValues.keySet().iterator();
  		while (iter.hasNext()) {
  			String name = iter.next().toString();
  			Double expectedValue = (Double)certifiedValues.get(name);
  			try {
  				Double summariesValue = (Double)PropertyUtils.getProperty(summaries, name);
  				TestUtils.assertEquals("summary value for " + name + " is incorrect.",
  						summariesValue.doubleValue(), expectedValue.doubleValue(), getMaximumAbsoluteError());
  			} catch (Exception ex) {
  			}
  			
  			try {
  				Double descriptivesValue = (Double)PropertyUtils.getProperty(descriptives, name);
  				TestUtils.assertEquals("descriptive value for " + name + " is incorrect.",
  						descriptivesValue.doubleValue(), expectedValue.doubleValue(), getMaximumAbsoluteError());
  			} catch (Exception ex) {
  			}
  		}
   	}
  }
  
  
  
  1.1                  jakarta-commons/math/src/test/org/apache/commons/math/stat/data/LewTest.java
  
  Index: LewTest.java
  ===================================================================
  /*
   * Copyright 2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package org.apache.commons.math.stat.data;
  
  /**
   * @version $Revision: 1.1 $ $Date: 2004/03/18 05:52:37 $
   */
  public class LewTest extends CertifiedDataAbstractTest {
  
  	protected String getResourceName() {
  		return "org/apache/commons/math/stat/data/Lew.txt";
  	}
  }
  
  
  
  1.1                  jakarta-commons/math/src/test/org/apache/commons/math/stat/data/LotteryTest.java
  
  Index: LotteryTest.java
  ===================================================================
  /*
   * Copyright 2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package org.apache.commons.math.stat.data;
  
  /**
   * @version $Revision: 1.1 $ $Date: 2004/03/18 05:52:37 $
   */
  public class LotteryTest extends CertifiedDataAbstractTest {
  
  	protected String getResourceName() {
  		return "org/apache/commons/math/stat/data/Lottery.txt";
  	}
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org