Statistics
| Revision:

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
}