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 }