    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  package org.apache.commons.math.stat;
    17
    18  import junit.framework.Test;
    19  import junit.framework.TestCase;
    20  import junit.framework.TestSuite;
    21
    22  import java.io.BufferedReader;
    23  import java.io.InputStreamReader;
    24
    25  import org.apache.commons.math.stat.descriptive.SummaryStatistics;
    26  import org.apache.commons.math.stat.descriptive.SummaryStatisticsImpl;
    27  import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
    28
    29  /***
    30   * Certified data test cases.
    31   * @version $Revision: 208874 $ $Date: 2005-07-02 15:24:59 -0700 (Sat, 02 Jul 2005) $
    32   */
    33  public class CertifiedDataTest extends TestCase  {
    34
    35      protected double mean = Double.NaN;
    36
    37      protected double std = Double.NaN;
    38
    39      /***
    40       * Certified Data Test Constructor
    41       * @param name
    42       */
    43      public CertifiedDataTest(String name) {
    44          super(name);
    45      }
    46
    47      /* (non-Javadoc)
    48       * @see junit.framework.TestCase#setUp()
    49       */
    50      public void setUp() {
    51      }
    52
    53      /***
    54       * @return The test suite
    55       */
    56      public static Test suite() {
    57          TestSuite suite = new TestSuite(CertifiedDataTest.class);
    58          suite.setName("Certified Tests");
    59          return suite;
    60      }
    61
    62      /***
    63       * Test StorelessDescriptiveStatistics
    64      */
    65      public void testUnivariateImpl() throws Exception {
    66          SummaryStatistics u = SummaryStatistics.newInstance(SummaryStatisticsImpl.class);
    67          loadStats("data/PiDigits.txt", u);
    68          assertEquals("PiDigits: std", std, u.getStandardDeviation(), .0000000000001);
    69          assertEquals("PiDigits: mean", mean, u.getMean(), .0000000000001);
    70
    71          loadStats("data/Mavro.txt", u);
    72          assertEquals("Mavro: std", std, u.getStandardDeviation(), .00000000000001);
    73          assertEquals("Mavro: mean", mean, u.getMean(), .00000000000001);
    74
    75          //loadStats("data/Michelso.txt");
    76          //assertEquals("Michelso: std", std, u.getStandardDeviation(), .00000000000001);
    77          //assertEquals("Michelso: mean", mean, u.getMean(), .00000000000001);
    78
    79          loadStats("data/NumAcc1.txt", u);
    80          assertEquals("NumAcc1: std", std, u.getStandardDeviation(), .00000000000001);
    81          assertEquals("NumAcc1: mean", mean, u.getMean(), .00000000000001);
    82
    83          //loadStats("data/NumAcc2.txt");
    84          //assertEquals("NumAcc2: std", std, u.getStandardDeviation(), .000000001);
    85          //assertEquals("NumAcc2: mean", mean, u.getMean(), .00000000000001);
    86      }
    87
    88      /***
    89       * Test StorelessDescriptiveStatistics
    90       */
    91      public void testStoredUnivariateImpl() throws Exception {
    92
    93          DescriptiveStatistics u = DescriptiveStatistics.newInstance();
    94
    95          loadStats("data/PiDigits.txt", u);
    96          assertEquals("PiDigits: std", std, u.getStandardDeviation(), .0000000000001);
    97          assertEquals("PiDigits: mean", mean, u.getMean(), .0000000000001);
    98
    99          loadStats("data/Mavro.txt", u);
    100         assertEquals("Mavro: std", std, u.getStandardDeviation(), .00000000000001);
    101         assertEquals("Mavro: mean", mean, u.getMean(), .00000000000001);
    102
    103         //loadStats("data/Michelso.txt");
    104         //assertEquals("Michelso: std", std, u.getStandardDeviation(), .00000000000001);
    105         //assertEquals("Michelso: mean", mean, u.getMean(), .00000000000001);
    106
    107         loadStats("data/NumAcc1.txt", u);
    108         assertEquals("NumAcc1: std", std, u.getStandardDeviation(), .00000000000001);
    109         assertEquals("NumAcc1: mean", mean, u.getMean(), .00000000000001);
    110
    111         //loadStats("data/NumAcc2.txt");
    112         //assertEquals("NumAcc2: std", std, u.getStandardDeviation(), .000000001);
    113         //assertEquals("NumAcc2: mean", mean, u.getMean(), .00000000000001);
    114     }
    115
    116     /***
    117      * loads a DescriptiveStatistics off of a test file
    118      * @param file
    119      * @param statistical summary
    120      */
    121     private void loadStats(String resource, Object u) throws Exception {
    122
    123         DescriptiveStatistics d = null;
    124         SummaryStatistics s = null;
    125         if (u instanceof DescriptiveStatistics) {
    126             d = (DescriptiveStatistics) u;
    127         } else {
    128             s = (SummaryStatistics) u;
    129         }
    130         u.getClass().getDeclaredMethod(
    131                 "clear", new Class[]{}).invoke(u, new Object[]{});
    132         mean = Double.NaN;
    133         std = Double.NaN;
    134
    135         BufferedReader in =
    136             new BufferedReader(
    137                     new InputStreamReader(
    138                             getClass().getResourceAsStream(resource)));
    139
    140         String line = null;
    141
    142         for (int j = 0; j < 60; j++) {
    143             line = in.readLine();
    144             if (j == 40) {
    145                 mean =
    146                     Double.parseDouble(
    147                             line.substring(line.lastIndexOf(":") + 1).trim());
    148             }
    149             if (j == 41) {
    150                 std =
    151                     Double.parseDouble(
    152                             line.substring(line.lastIndexOf(":") + 1).trim());
    153             }
    154         }
    155
    156         line = in.readLine();
    157
    158         while (line != null) {
    159             if (d != null) {
    160                 d.addValue(Double.parseDouble(line.trim()));
    161             }  else {
    162                 s.addValue(Double.parseDouble(line.trim()));
    163             }
    164             line = in.readLine();
    165         }
    166
    167         in.close();
    168     }
    169 }