001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.commons.math.util;
018
019 import org.apache.commons.math.stat.StatUtils;
020
021 import junit.framework.TestCase;
022
023 /**
024 * This class contains test cases for the ExpandableDoubleArray.
025 *
026 * @version $Revision: 670469 $ $Date: 2008-06-23 04:01:38 -0400 (Mon, 23 Jun 2008) $
027 */
028 public abstract class DoubleArrayAbstractTest extends TestCase {
029
030 protected DoubleArray da = null;
031
032 // Array used to test rolling
033 protected DoubleArray ra = null;
034
035 public DoubleArrayAbstractTest(String name) {
036 super(name);
037 }
038
039 public void testAdd1000() {
040
041 for (int i = 0; i < 1000; i++) {
042 da.addElement(i);
043 }
044
045 assertEquals(
046 "Number of elements should be equal to 1000 after adding 1000 values",
047 1000,
048 da.getNumElements());
049
050 assertEquals(
051 "The element at the 56th index should be 56",
052 56.0,
053 da.getElement(56),
054 Double.MIN_VALUE);
055
056 }
057
058 public void testGetValues() {
059 double[] controlArray = { 2.0, 4.0, 6.0 };
060
061 da.addElement(2.0);
062 da.addElement(4.0);
063 da.addElement(6.0);
064 double[] testArray = da.getElements();
065
066 for (int i = 0; i < da.getNumElements(); i++) {
067 assertEquals(
068 "The testArray values should equal the controlArray values, index i: "
069 + i
070 + " does not match",
071 testArray[i],
072 controlArray[i],
073 Double.MIN_VALUE);
074 }
075
076 }
077
078 public void testAddElementRolling() {
079 ra.addElement(0.5);
080 ra.addElement(1.0);
081 ra.addElement(1.0);
082 ra.addElement(1.0);
083 ra.addElement(1.0);
084 ra.addElement(1.0);
085 ra.addElementRolling(2.0);
086
087 assertEquals(
088 "There should be 6 elements in the eda",
089 6,
090 ra.getNumElements());
091 assertEquals(
092 "The max element should be 2.0",
093 2.0,
094 StatUtils.max(ra.getElements()),
095 Double.MIN_VALUE);
096 assertEquals(
097 "The min element should be 1.0",
098 1.0,
099 StatUtils.min(ra.getElements()),
100 Double.MIN_VALUE);
101
102 for (int i = 0; i < 1024; i++) {
103 ra.addElementRolling(i);
104 }
105
106 assertEquals(
107 "We just inserted 1024 rolling elements, num elements should still be 6",
108 6,
109 ra.getNumElements());
110 }
111
112 public void testMinMax() {
113 da.addElement(2.0);
114 da.addElement(22.0);
115 da.addElement(-2.0);
116 da.addElement(21.0);
117 da.addElement(22.0);
118 da.addElement(42.0);
119 da.addElement(62.0);
120 da.addElement(22.0);
121 da.addElement(122.0);
122 da.addElement(1212.0);
123
124 assertEquals("Min should be -2.0", -2.0, StatUtils.min(da.getElements()), Double.MIN_VALUE);
125 assertEquals(
126 "Max should be 1212.0",
127 1212.0,
128 StatUtils.max(da.getElements()),
129 Double.MIN_VALUE);
130 }
131
132 }