    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.stat.data;
    18
    19  import java.io.BufferedReader;
    20  import java.io.IOException;
    21  import java.io.InputStreamReader;
    22  import java.lang.reflect.Method;
    23  import java.net.URL;
    24  import java.util.HashMap;
    25  import java.util.Iterator;
    26  import java.util.Map;
    27
    28  import org.apache.commons.math.TestUtils;
    29  import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
    30  import org.apache.commons.math.stat.descriptive.SummaryStatistics;
    31
    32  import junit.framework.TestCase;
    33
    34  /***
    35   * @version $Revision: 201916 $ $Date: 2005-06-26 15:25:41 -0700 (Sun, 26 Jun 2005) $
    36   */
    37  public abstract class CertifiedDataAbstractTest extends TestCase {
    38
    39      private DescriptiveStatistics descriptives;
    40
    41      private SummaryStatistics summaries;
    42
    43      private Map certifiedValues;
    44
    45      protected void setUp() throws Exception {
    46          descriptives = DescriptiveStatistics.newInstance();
    47          summaries = SummaryStatistics.newInstance();
    48          certifiedValues = new HashMap();
    49
    50          loadData();
    51      }
    52
    53      private void loadData() throws IOException {
    54          BufferedReader in = null;
    55
    56          try {
    57              URL resourceURL = getClass().getClassLoader().getResource(getResourceName());
    58              in = new BufferedReader(new InputStreamReader(resourceURL.openStream()));
    59
    60              String line = in.readLine();
    61              while (line != null) {
    62
    63                  /* this call to StringUtils did little for the
    64                   * following conditional structure
    65                   */
    66                  line = line.trim();
    67
    68                  // not empty line or comment
    69                  if (!("".equals(line) || line.startsWith("#"))) {
    70                      int n = line.indexOf('=');
    71                      if (n == -1) {
    72                          // data value
    73                          double value = Double.parseDouble(line);
    74                          descriptives.addValue(value);
    75                          summaries.addValue(value);
    76                      } else {
    77                          // certified value
    78                          String name = line.substring(0, n).trim();
    79                          String valueString = line.substring(n + 1).trim();
    80                          Double value = new Double(valueString);
    81                          certifiedValues.put(name, value);
    82                      }
    83                  }
    84                  line = in.readLine();
    85              }
    86          } finally {
    87              if (in != null) {
    88                  in.close();
    89              }
    90          }
    91      }
    92
    93      /***
    94       * @return
    95       */
    96      protected abstract String getResourceName();
    97
    98      protected double getMaximumAbsoluteError() {
    99          return 1.0e-5;
    100     }
    101
    102     protected void tearDown() throws Exception {
    103         descriptives.clear();
    104         descriptives = null;
    105
    106         summaries.clear();
    107         summaries = null;
    108
    109         certifiedValues.clear();
    110         certifiedValues = null;
    111     }
    112
    113     public void testCertifiedValues() throws Exception {
    114         Iterator iter = certifiedValues.keySet().iterator();
    115         while (iter.hasNext()) {
    116             String name = iter.next().toString();
    117             Double expectedValue = (Double)certifiedValues.get(name);
    118             try {
    119                 Double summariesValue = (Double)this.getProperty(summaries, name);
    120                 TestUtils.assertEquals("summary value for " + name + " is incorrect.",
    121                         summariesValue.doubleValue(), expectedValue.doubleValue(), getMaximumAbsoluteError());
    122             } catch (Exception ex) {
    123             }
    124
    125             try {
    126                 Double descriptivesValue = (Double)this.getProperty(descriptives, name);
    127                 TestUtils.assertEquals("descriptive value for " + name + " is incorrect.",
    128                         descriptivesValue.doubleValue(), expectedValue.doubleValue(), getMaximumAbsoluteError());
    129             } catch (Exception ex) {
    130             }
    131         }
    132     }
    133
    134
    135     protected Object getProperty(Object bean, String name) throws Exception{
    136         // Get the value of prop
    137         String prop = "get" + name.substring(0,1).toUpperCase() + name.substring(1);
    138         Method meth = bean.getClass().getMethod(prop, new Class[0]);
    139         return meth.invoke(bean, new Object[0]);
    140     }
    141 }