1 16 package org.apache.commons.math.stat.descriptive; 17 18 import org.apache.commons.math.TestUtils; 19 import org.apache.commons.math.stat.descriptive.moment.SecondMoment; 20 21 25 public abstract class StorelessUnivariateStatisticAbstractTest 26 extends UnivariateStatisticAbstractTest { 27 28 public StorelessUnivariateStatisticAbstractTest(String name) { 29 super(name); 30 } 31 32 33 protected double[][] smallSamples = {{}, {1}, {1,2}, {1,2,3}, {1,2,3,4}}; 34 35 36 public abstract UnivariateStatistic getUnivariateStatistic(); 37 38 39 public abstract double expectedValue(); 40 41 42 public void testIncrementation() throws Exception { 43 44 StorelessUnivariateStatistic statistic = 45 (StorelessUnivariateStatistic) getUnivariateStatistic(); 46 47 statistic.clear(); 48 49 for (int i = 0; i < testArray.length; i++) { 50 statistic.increment(testArray[i]); 51 } 52 53 assertEquals(expectedValue(), statistic.getResult(), getTolerance()); 54 assertEquals(testArray.length, statistic.getN()); 55 56 statistic.clear(); 57 58 assertTrue(Double.isNaN(statistic.getResult())); 59 assertEquals(0, statistic.getN()); 60 61 } 62 63 public void testSerialization() throws Exception { 64 65 StorelessUnivariateStatistic statistic = 66 (StorelessUnivariateStatistic) getUnivariateStatistic(); 67 68 TestUtils.checkSerializedEquality(statistic); 69 70 statistic.clear(); 71 72 for (int i = 0; i < testArray.length; i++) { 73 statistic.increment(testArray[i]); 74 if(i % 5 == 0) 75 statistic = (StorelessUnivariateStatistic)TestUtils.serializeAndRecover(statistic); 76 } 77 78 TestUtils.checkSerializedEquality(statistic); 79 80 assertEquals(expectedValue(), statistic.getResult(), getTolerance()); 81 82 statistic.clear(); 83 84 assertTrue(Double.isNaN(statistic.getResult())); 85 86 } 87 88 public void testEqualsAndHashCode() { 89 StorelessUnivariateStatistic statistic = 90 (StorelessUnivariateStatistic) getUnivariateStatistic(); 91 StorelessUnivariateStatistic statistic2 = null; 92 93 assertTrue("non-null, compared to null", !statistic.equals(statistic2)); 94 assertTrue("reflexive, non-null", statistic.equals(statistic)); 95 96 int emptyHash = statistic.hashCode(); 97 statistic2 = (StorelessUnivariateStatistic) getUnivariateStatistic(); 98 assertTrue("empty stats should be equal", statistic.equals(statistic2)); 99 assertEquals("empty stats should have the same hashcode", 100 emptyHash, statistic2.hashCode()); 101 102 statistic.increment(1d); 103 assertTrue("reflexive, non-empty", statistic.equals(statistic)); 104 assertTrue("non-empty, compared to empty", !statistic.equals(statistic2)); 105 assertTrue("non-empty, compared to empty", !statistic2.equals(statistic)); 106 assertTrue("non-empty stat should have different hashcode from empty stat", 107 statistic.hashCode() != emptyHash); 108 109 statistic2.increment(1d); 110 assertTrue("stats with same data should be equal", statistic.equals(statistic2)); 111 assertEquals("stats with same data should have the same hashcode", 112 statistic.hashCode(), statistic2.hashCode()); 113 114 statistic.increment(Double.POSITIVE_INFINITY); 115 assertTrue("stats with different n's should not be equal", !statistic2.equals(statistic)); 116 assertTrue("stats with different n's should have different hashcodes", 117 statistic.hashCode() != statistic2.hashCode()); 118 119 statistic2.increment(Double.POSITIVE_INFINITY); 120 assertTrue("stats with same data should be equal", statistic.equals(statistic2)); 121 assertEquals("stats with same data should have the same hashcode", 122 statistic.hashCode(), statistic2.hashCode()); 123 124 statistic.clear(); 125 statistic2.clear(); 126 assertTrue("cleared stats should be equal", statistic.equals(statistic2)); 127 assertEquals("cleared stats should have thashcode of empty stat", 128 emptyHash, statistic2.hashCode()); 129 assertEquals("cleared stats should have thashcode of empty stat", 130 emptyHash, statistic.hashCode()); 131 132 } 133 134 public void testMomentSmallSamples() { 135 UnivariateStatistic stat = getUnivariateStatistic(); 136 if (stat instanceof SecondMoment) { 137 SecondMoment moment = (SecondMoment) getUnivariateStatistic(); 138 assertTrue(Double.isNaN(moment.getResult())); 139 moment.increment(1d); 140 assertEquals(0d, moment.getResult(), 0); 141 } 142 } 143 144 148 public void testConsistency() { 149 StorelessUnivariateStatistic stat = (StorelessUnivariateStatistic) getUnivariateStatistic(); 150 stat.incrementAll(testArray); 151 assertEquals(stat.getResult(), stat.evaluate(testArray), getTolerance()); 152 for (int i = 0; i < smallSamples.length; i++) { 153 stat.clear(); 154 for (int j =0; j < smallSamples[i].length; j++) { 155 stat.increment(smallSamples[i][j]); 156 } 157 TestUtils.assertEquals(stat.getResult(), stat.evaluate(smallSamples[i]), getTolerance()); 158 } 159 } 160 161 } 162 | Popular Tags |