    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.util;
    17
    18  import org.apache.commons.math.stat.StatUtils;
    19
    20  import junit.framework.TestCase;
    21
    22  /***
    23   * This class contains test cases for the ExpandableDoubleArray.
    24   *
    25   * @version $Revision: 1.9 $ $Date: 2004/02/21 21:35:18 $
    26   */
    27  public abstract class DoubleArrayAbstractTest extends TestCase {
    28
    29  	protected DoubleArray da = null;
    30
    31  	// Array used to test rolling
    32  	protected DoubleArray ra = null;
    33
    34  	public DoubleArrayAbstractTest(String name) {
    35  		super(name);
    36  	}
    37
    38  	public void testAdd1000() {
    39
    40  		for (int i = 0; i < 1000; i++) {
    41  			da.addElement(i);
    42  		}
    43
    44  		assertEquals(
    45  			"Number of elements should be equal to 1000 after adding 1000 values",
    46  			1000,
    47  			da.getNumElements());
    48
    49  		assertEquals(
    50  			"The element at the 56th index should be 56",
    51  			56.0,
    52  			da.getElement(56),
    53  			Double.MIN_VALUE);
    54
    55  	}
    56
    57  	public void testGetValues() {
    58  		double[] controlArray = { 2.0, 4.0, 6.0 };
    59
    60  		da.addElement(2.0);
    61  		da.addElement(4.0);
    62  		da.addElement(6.0);
    63  		double[] testArray = da.getElements();
    64
    65  		for (int i = 0; i < da.getNumElements(); i++) {
    66  			assertEquals(
    67  				"The testArray values should equal the controlArray values, index i: "
    68  					+ i
    69  					+ " does not match",
    70  				testArray[i],
    71  				controlArray[i],
    72  				Double.MIN_VALUE);
    73  		}
    74
    75  	}
    76
    77  	public void testAddElementRolling() {
    78  		ra.addElement(0.5);
    79  		ra.addElement(1.0);
    80  		ra.addElement(1.0);
    81  		ra.addElement(1.0);
    82  		ra.addElement(1.0);
    83  		ra.addElement(1.0);
    84  		ra.addElementRolling(2.0);
    85
    86  		assertEquals(
    87  			"There should be 6 elements in the eda",
    88  			6,
    89  			ra.getNumElements());
    90  		assertEquals(
    91  			"The max element should be 2.0",
    92  			2.0,
    93              StatUtils.max(ra.getElements()),
    94  			Double.MIN_VALUE);
    95  		assertEquals(
    96  			"The min element should be 1.0",
    97  			1.0,
    98              StatUtils.min(ra.getElements()),
    99  			Double.MIN_VALUE);
    100
    101 		for (int i = 0; i < 1024; i++) {
    102 			ra.addElementRolling(i);
    103 		}
    104
    105 		assertEquals(
    106 			"We just inserted 1024 rolling elements, num elements should still be 6",
    107 			6,
    108 			ra.getNumElements());
    109 	}
    110
    111 	public void testMinMax() {
    112 		da.addElement(2.0);
    113 		da.addElement(22.0);
    114 		da.addElement(-2.0);
    115 		da.addElement(21.0);
    116 		da.addElement(22.0);
    117 		da.addElement(42.0);
    118 		da.addElement(62.0);
    119 		da.addElement(22.0);
    120 		da.addElement(122.0);
    121 		da.addElement(1212.0);
    122
    123 		assertEquals("Min should be -2.0", -2.0, StatUtils.min(da.getElements()), Double.MIN_VALUE);
    124 		assertEquals(
    125 			"Max should be 1212.0",
    126 			1212.0,
    127             StatUtils.max(da.getElements()),
    128 			Double.MIN_VALUE);
    129 	}
    130
    131 }