Coverage Report - org.apache.commons.math.stat.descriptive.AbstractUnivariateStatistic

Classes in this File Line Coverage Branch Coverage Complexity
AbstractUnivariateStatistic
100% 
100% 
4.333

 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.descriptive;
 17  
 
 18  
 import java.io.Serializable;
 19  
 
 20  
 /**
 21  
  * Abstract base class for all implementations of the 
 22  
  * {@link UnivariateStatistic} interface.
 23  
  * <p>
 24  
  * Provides a default implementation of <code>evaluate(double[]),</code> 
 25  
  * delegating to <code>evaluate(double[], int, int)</code> in the natural way.
 26  
  * <p>
 27  
  * Also includes a <code>test</code> method that performs generic parameter
 28  
  * validation for the <code>evaluate</code> methods.
 29  
  * <p>
 30  
  * 
 31  
  * @version $Revision$ $Date: 2005-02-26 05:11:52 -0800 (Sat, 26 Feb 2005) $
 32  
  */
 33  130028
 public abstract class AbstractUnivariateStatistic
 34  
     implements UnivariateStatistic, Serializable {
 35  
     
 36  
     /** Serialization UID */
 37  
     static final long serialVersionUID = -8007759382851708045L;
 38  
 
 39  
     /**
 40  
      * @see org.apache.commons.math.stat.descriptive.UnivariateStatistic#evaluate(double[])
 41  
      */
 42  
     public double evaluate(final double[] values) {
 43  34
         test(values, 0, 0);
 44  32
         return evaluate(values, 0, values.length);
 45  
     }
 46  
 
 47  
     /**
 48  
      * @see org.apache.commons.math.stat.descriptive.UnivariateStatistic#evaluate(double[], int, int)
 49  
      */
 50  
     public abstract double evaluate(final double[] values, final int begin, final int length);
 51  
 
 52  
     /**
 53  
      * This method is used by <code>evaluate(double[], int, int)</code> methods
 54  
      * to verify that the input parameters designate a subarray of positive length.
 55  
      * <p>
 56  
      * <ul>
 57  
      * <li>returns <code>true</code> iff the parameters designate a subarray of 
 58  
      * positive length</li>
 59  
      * <li>throws <code>IllegalArgumentException</code> if the array is null or
 60  
      * or the indices are invalid</li>
 61  
      * <li>returns <code>false</li> if the array is non-null, but 
 62  
      * <code>length</code> is 0.
 63  
      * </ul>
 64  
      *
 65  
      * @param values the input array
 66  
      * @param begin index of the first array element to include
 67  
      * @param length the number of elements to include
 68  
      * @return true if the parameters are valid and designate a subarray of positive length
 69  
      * @throws IllegalArgumentException if the indices are invalid or the array is null
 70  
      */
 71  
     protected boolean test(
 72  
         final double[] values,
 73  
         final int begin,
 74  
         final int length) {
 75  
 
 76  2582
         if (values == null) {
 77  22
             throw new IllegalArgumentException("input value array is null");
 78  
         }
 79  
         
 80  2560
         if (begin < 0) {
 81  4
             throw new IllegalArgumentException("start position cannot be negative");
 82  
         }
 83  
         
 84  2556
         if (length < 0) {
 85  2
             throw new IllegalArgumentException("length cannot be negative");
 86  
         }
 87  
         
 88  2554
         if (begin + length > values.length) {
 89  6
             throw new IllegalArgumentException(
 90  
                 "begin + length > values.length");
 91  
         }
 92  
 
 93  2548
         if (length == 0) {
 94  150
             return false;
 95  
         }
 96  
 
 97  2398
         return true;
 98  
 
 99  
     }
 100  
 }