svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.raster / org.gvsig.raster.lib / org.gvsig.raster.lib.buffer.impl / src / test / java / org / gvsig / raster / lib / buffer / statistics / DefaultStatisticsTest.java @ 44831
History | View | Annotate | Download (10.8 KB)
1 |
package org.gvsig.raster.lib.buffer.statistics; |
---|---|
2 |
|
3 |
import java.util.Arrays; |
4 |
import java.util.Iterator; |
5 |
|
6 |
import org.gvsig.raster.lib.buffer.api.Band; |
7 |
import org.gvsig.raster.lib.buffer.api.Buffer; |
8 |
import org.gvsig.raster.lib.buffer.api.BufferLocator; |
9 |
import org.gvsig.raster.lib.buffer.api.BufferManager; |
10 |
import org.gvsig.raster.lib.buffer.api.NoData; |
11 |
import org.gvsig.raster.lib.buffer.api.statistics.Statistics; |
12 |
import org.gvsig.raster.lib.buffer.api.statistics.StatisticsBand; |
13 |
import org.gvsig.raster.lib.buffer.impl.MemoryBandDouble; |
14 |
import org.gvsig.tools.ToolsLocator; |
15 |
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase; |
16 |
import org.gvsig.tools.task.SimpleTaskStatus; |
17 |
|
18 |
public class DefaultStatisticsTest extends AbstractLibraryAutoInitTestCase { |
19 |
|
20 |
private final int BUFFER_ROWS = 1; |
21 |
private final int BUFFER_COLUMNS = 10; |
22 |
|
23 |
private final Number defaultNoDataValue = 10; |
24 |
private final Number noDataValue = 20; |
25 |
private Buffer testBuffer = null; |
26 |
|
27 |
private byte[] byteData = new byte[] { -86, 72, 102, -70, -3, -59, -36, 76, 66, 20 }; |
28 |
private short[] shortData = new short[] { 13660, 6418, 4188, -8738, -31251, 17833, 12417, |
29 |
-10285, 31954, -8976 }; |
30 |
private int[] intData = |
31 |
new int[] { 5, 478564, 427, 7647, 7885, -7841, 4523, 3478, -4555247, 0 }; |
32 |
private float[] floatData = new float[] { -447.757514f, 1.45277f, 41.457276f,457.678547f,520f,575f,625f,653f,705f,999f}; |
33 |
private double[] doubleData = new double[] { -43d, 1.45277d, 41.457276d,457.678547d,520d,575d,625d,653d,705d,999d}; |
34 |
|
35 |
|
36 |
private int[] bandDataTypes = |
37 |
new int[] { |
38 |
BufferManager.TYPE_BYTE, |
39 |
BufferManager.TYPE_SHORT, |
40 |
BufferManager.TYPE_INT, |
41 |
BufferManager.TYPE_FLOAT, |
42 |
BufferManager.TYPE_DOUBLE |
43 |
}; |
44 |
|
45 |
private Statistics statistics = null; |
46 |
|
47 |
@Override
|
48 |
protected void doSetUp() throws Exception { |
49 |
|
50 |
NoData[] bandNodata = new NoData[6]; |
51 |
BufferManager bufferManager = BufferLocator.getBufferManager(); |
52 |
Arrays.fill(bandNodata,
|
53 |
bufferManager.createNoData(noDataValue, defaultNoDataValue)); |
54 |
|
55 |
testBuffer = |
56 |
bufferManager.createBuffer(BUFFER_ROWS, BUFFER_COLUMNS, |
57 |
bandDataTypes, bandNodata, null, null); |
58 |
|
59 |
testBuffer.getBand(0).putRow(0, byteData); |
60 |
testBuffer.getBand(1).putRow(0, shortData); |
61 |
testBuffer.getBand(2).putRow(0, intData); |
62 |
testBuffer.getBand(3).putRow(0, floatData); |
63 |
testBuffer.getBand(4).putRow(0, doubleData); |
64 |
|
65 |
SimpleTaskStatus simpleTaskStatus = |
66 |
ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("test Statistics");
|
67 |
statistics = testBuffer.getStatistics(simpleTaskStatus); |
68 |
|
69 |
} |
70 |
|
71 |
/**
|
72 |
* Test get number of values
|
73 |
*/
|
74 |
public void testGetNumberOfValues() { |
75 |
|
76 |
long[] numberOfValues = statistics.getNumberOfValues(); |
77 |
for (int i = 0; i < numberOfValues.length; i++) { |
78 |
assertEquals(BUFFER_ROWS * BUFFER_COLUMNS, numberOfValues[i]); |
79 |
} |
80 |
} |
81 |
|
82 |
/**
|
83 |
* Test get max operation
|
84 |
*/
|
85 |
public void testGetMax() { |
86 |
|
87 |
double[] max = statistics.getMax(); |
88 |
assertTrue(equalsDouble(253, max[0])); |
89 |
assertTrue(equalsDouble(31954d, max[1])); |
90 |
assertTrue(equalsDouble(478564d, max[2])); |
91 |
assertTrue(equalsDouble(999d, max[3])); |
92 |
assertTrue(equalsDouble(999d, max[4])); |
93 |
} |
94 |
|
95 |
public void testGetSecondMax() { |
96 |
|
97 |
double[] secondMax = statistics.getSecondMax(); |
98 |
assertTrue(equalsDouble(220, secondMax[0])); |
99 |
assertTrue(equalsDouble(17833d, secondMax[1])); |
100 |
assertTrue(equalsDouble(7885d, secondMax[2])); |
101 |
assertTrue(equalsDouble(705d, secondMax[3])); |
102 |
assertTrue(equalsDouble(705d, secondMax[4])); |
103 |
} |
104 |
|
105 |
public void testGetSecondMin() { |
106 |
double[] secondMax = statistics.getSecondMin(); |
107 |
assertTrue(equalsDouble(66, secondMax[0])); |
108 |
assertTrue(equalsDouble(-10285d, secondMax[1])); |
109 |
assertTrue(equalsDouble(-7841d, secondMax[2])); |
110 |
assertTrue(equalsDouble(1.45277d, secondMax[3])); |
111 |
assertTrue(equalsDouble(1.45277d, secondMax[4])); |
112 |
} |
113 |
|
114 |
public void testGetMaximun() { |
115 |
double maximun = statistics.getMaximum();
|
116 |
assertTrue(equalsDouble(478564d, maximun));
|
117 |
assertTrue(statistics.isCalculated()); |
118 |
testBuffer.getBand(4).set(0, 0, 525000d); |
119 |
Statistics newStatistics = testBuffer.getStatistics(null);
|
120 |
assertTrue(statistics!=newStatistics); |
121 |
assertTrue(newStatistics.isCalculated()); |
122 |
|
123 |
assertTrue(equalsDouble(525000d, newStatistics.getMaximum()));
|
124 |
|
125 |
} |
126 |
|
127 |
public void testGetMinimun() { |
128 |
double minimun = statistics.getMinimum();
|
129 |
assertTrue(equalsDouble(-4555247d, minimun));
|
130 |
} |
131 |
|
132 |
public void testGetMean() { |
133 |
double[] mean = statistics.getMean(); |
134 |
assertTrue(equalsDouble(136.2, mean[0])); |
135 |
assertTrue(equalsDouble(2722d, mean[1])); |
136 |
assertTrue(equalsDouble(-406055.9d, mean[2])); |
137 |
assertTrue(equalsDouble(412.98310964107515d, mean[3])); |
138 |
assertTrue(equalsDouble(453.45886037349703d, mean[4])); |
139 |
} |
140 |
|
141 |
public void testGetMedian() { |
142 |
double[] median = statistics.getMedian(); |
143 |
assertTrue(equalsDouble(136, median[0])); |
144 |
assertTrue(equalsDouble(5303d, median[1])); |
145 |
assertTrue(equalsDouble(1952.5d, median[2])); |
146 |
assertTrue(equalsDouble(456.46593475341797d, median[3])); |
147 |
assertTrue(equalsDouble(530.1d, median[4])); |
148 |
} |
149 |
|
150 |
public void testGetMin() { |
151 |
double[] min = statistics.getMin(); |
152 |
assertTrue(equalsDouble(20d, min[0])); |
153 |
assertTrue(equalsDouble(-31251d, min[1])); |
154 |
assertTrue(equalsDouble(-4555247d, min[2])); |
155 |
assertTrue(equalsDouble(-447.75750732421875d, min[3])); |
156 |
assertTrue(equalsDouble(-43d, min[4])); |
157 |
} |
158 |
|
159 |
public void testGetVariance() { |
160 |
double[] var = statistics.getVariance(); |
161 |
assertTrue(equalsDouble(6147.733333333334d, var[0])); |
162 |
assertTrue(equalsDouble(3.226462408888889E8, var[1])); |
163 |
assertTrue(equalsDouble(2.1478555179265442E12, var[2])); |
164 |
assertTrue(equalsDouble(179912.41954150258, var[3])); |
165 |
assertTrue(equalsDouble(118875.01094268242, var[4])); |
166 |
} |
167 |
|
168 |
public void testGetBandCount() { |
169 |
assertEquals(bandDataTypes.length, testBuffer.getBandCount()); |
170 |
} |
171 |
|
172 |
public void testIsCalculated() { |
173 |
assertTrue(statistics.isCalculated()); |
174 |
} |
175 |
|
176 |
public void testGetVarianceCovarianceMatrix() { |
177 |
double[][] varcov = statistics.getVarianceCovarianceMatrix(); |
178 |
for(int i=0; i<varcov.length; i++){ |
179 |
for(int j=0; j<varcov.length; j++){ |
180 |
assertTrue(equalsDouble(varcov[i][j], varcov[j][i])); |
181 |
} |
182 |
} |
183 |
for(int i=0; i<varcov.length; i++){ |
184 |
assertTrue(equalsDouble(varcov[i][i], statistics.getVariance()[i])); |
185 |
} |
186 |
|
187 |
double[][] prueba = { |
188 |
{6147.733333333334, 366.44444444440563, 3648.0666666709712, -2656.0444444444483, -2100.2222222222267}, |
189 |
{366.44444444440563, 3.226462408888889E8, 6.0213913666666776E7, -1394641.8888888892, -903647.2222222224}, |
190 |
{3648.0666666709712, 6.0213913666666776E7, 2.1478555179265442E12, -1.695740194333333E8, -1.513463968111111E8}, |
191 |
{-2656.0444444444483, -1394641.8888888892, -1.695740194333333E8, 179912.41954150255, 141202.28325532677}, |
192 |
{-2100.2222222222267, -903647.2222222224, -1.513463968111111E8, 141202.28325532677, 118875.01094268242}}; |
193 |
|
194 |
for(int i=0; i<varcov.length; i++){ |
195 |
for(int j=0; j<varcov.length; j++){ |
196 |
assertTrue(equalsDouble(prueba[i][j], varcov[i][j])); |
197 |
assertTrue(equalsDouble(prueba[i][j], varcov[j][i])); |
198 |
} |
199 |
} |
200 |
} |
201 |
|
202 |
public void testGetTailTrimValueDouble() { |
203 |
double[][] tailTrimValueObj = statistics.getTailTrimValue(30d); |
204 |
|
205 |
assertTrue(equalsDouble(74.0d, tailTrimValueObj[0][0])); |
206 |
assertTrue(equalsDouble(191.5d, tailTrimValueObj[0][1])); |
207 |
|
208 |
assertTrue(equalsDouble(-8857.0d, tailTrimValueObj[1][0])); |
209 |
assertTrue(equalsDouble(13038.5d, tailTrimValueObj[1][1])); |
210 |
|
211 |
assertTrue(equalsDouble(2.5d, tailTrimValueObj[2][0])); |
212 |
assertTrue(equalsDouble(6085.0d, tailTrimValueObj[2][1])); |
213 |
|
214 |
assertTrue(equalsDouble(275.6212463378906d, tailTrimValueObj[3][0])); |
215 |
assertTrue(equalsDouble(637.3106231689453d, tailTrimValueObj[3][1])); |
216 |
|
217 |
assertTrue(equalsDouble(217.5d, tailTrimValueObj[4][0])); |
218 |
assertTrue(equalsDouble(634.3d, tailTrimValueObj[4][1])); |
219 |
|
220 |
assertTrue(equalsDouble(217.5d, tailTrimValueObj[4][0])); |
221 |
assertTrue(equalsDouble(634.3d, tailTrimValueObj[4][1])); |
222 |
|
223 |
} |
224 |
|
225 |
public void testGetTailTrimValueInt() { |
226 |
double[][] tailTrimValueObj = statistics.getTailTrimValue(3); |
227 |
|
228 |
assertTrue(equalsDouble(74d, tailTrimValueObj[0][0])); |
229 |
assertTrue(equalsDouble(191.5d, tailTrimValueObj[0][1])); |
230 |
|
231 |
assertTrue(equalsDouble(-8857.0d, tailTrimValueObj[1][0])); |
232 |
assertTrue(equalsDouble(13038.5d, tailTrimValueObj[1][1])); |
233 |
|
234 |
assertTrue(equalsDouble(2.5d, tailTrimValueObj[2][0])); |
235 |
assertTrue(equalsDouble(6085.0d, tailTrimValueObj[2][1])); |
236 |
|
237 |
assertTrue(equalsDouble(275.6212463378906d, tailTrimValueObj[3][0])); |
238 |
assertTrue(equalsDouble(637.3106231689453d, tailTrimValueObj[3][1])); |
239 |
|
240 |
assertTrue(equalsDouble(217.5d, tailTrimValueObj[4][0])); |
241 |
assertTrue(equalsDouble(634.3d, tailTrimValueObj[4][1])); |
242 |
|
243 |
assertTrue(equalsDouble(217.5d, tailTrimValueObj[4][0])); |
244 |
assertTrue(equalsDouble(634.3d, tailTrimValueObj[4][1])); |
245 |
} |
246 |
|
247 |
public void testIterator() { |
248 |
Iterator<Band> iterator = testBuffer.iterator();
|
249 |
|
250 |
assertNotNull(iterator); |
251 |
|
252 |
int cont = 0; |
253 |
while(iterator.hasNext()){
|
254 |
assertNotNull(iterator.next()); |
255 |
cont++; |
256 |
} |
257 |
assertEquals(testBuffer.getBandCount(), cont); |
258 |
|
259 |
iterator = testBuffer.iterator(); |
260 |
while(iterator.hasNext()){
|
261 |
iterator.next(); |
262 |
iterator.remove(); |
263 |
} |
264 |
assertTrue(testBuffer.getBandCount() == 0);
|
265 |
} |
266 |
|
267 |
private boolean equalsDouble(double a, double b) { |
268 |
if (Math.abs(a - b) < 0.00000001) { |
269 |
return true; |
270 |
} |
271 |
return false; |
272 |
} |
273 |
|
274 |
public void testBufferStatistics() { |
275 |
assertTrue(statistics.isCalculated()); |
276 |
|
277 |
double[] otherDoubleData = new double[] { -0.5d, -0.4d, -0.3d, -0.2d, -0.1d, 0d, 0.1d, 0.2d, 0.3d, 0.4d}; |
278 |
MemoryBandDouble band = new MemoryBandDouble(1, BUFFER_COLUMNS); |
279 |
band.putRow(0, otherDoubleData);
|
280 |
assertTrue(statistics.getBandCount()==5);
|
281 |
testBuffer.addBand(band); |
282 |
assertTrue(statistics.getBandCount()==5);
|
283 |
Statistics newStatistics = testBuffer.getStatistics(null);
|
284 |
assertFalse(statistics==newStatistics); |
285 |
assertTrue(newStatistics.isCalculated()); |
286 |
assertTrue(newStatistics.getBandCount()==6);
|
287 |
|
288 |
} |
289 |
} |