@Test public void testPercentiles50NoWrap() { StatsBuffer buffer = getNoWrap(); double[] percentiles = buffer.getPercentileValues(); // testNG does not give good errors if we do assertEquals on the two arrays assertEquals(percentiles[0], 250.5); }
// Before fix this would throw an ArrayIndexOutOfBoundException @Test public void testCountOverflow() throws Exception { StatsBuffer buffer = new StatsBuffer(SIZE, PERCENTILES); setCount(buffer, Integer.MAX_VALUE); buffer.record(1); buffer.record(2); }
StatsBuffer getWithWrap() { StatsBuffer buffer = new StatsBuffer(SIZE, PERCENTILES); for (int i = SIZE * 2; i > 0; --i) { buffer.record(i); } buffer.computeStats(); return buffer; }
@Test public void testEmptyBuffer() { StatsBuffer buffer = new StatsBuffer(SIZE, PERCENTILES); assertEmpty(buffer); buffer.computeStats(); assertEmpty(buffer); }
StatsBuffer getNoWrap() { StatsBuffer buffer = new StatsBuffer(SIZE, PERCENTILES); int max = SIZE / 2; for (int i = 0; i <= max; ++i) { buffer.record(i); } buffer.computeStats(); return buffer; }
void assertEmpty(StatsBuffer buffer) { assertEquals(buffer.getCount(), 0); assertEquals(buffer.getTotalTime(), 0); assertEquals(buffer.getMax(), 0); assertEquals(buffer.getMin(), 0); // the following values could be NaN assertEquals(buffer.getMean(), 0.0); assertEquals(buffer.getVariance(), 0.0); assertEquals(buffer.getStdDev(), 0.0); assertEquals(buffer.getPercentileValues()[0], 0.0); }
@Test public void testPercentiles99NoWrap() { StatsBuffer buffer = getNoWrap(); double[] percentiles = buffer.getPercentileValues(); assertEquals(percentiles[2], 495.99); }
@Test public void testStdDevNoWrap() { StatsBuffer buffer = getNoWrap(); assertEquals(buffer.getStdDev(), 144.62595, 1e-4); }
@Test public void testMinWrap() { StatsBuffer buffer = getWithWrap(); assertEquals(buffer.getMin(), 1); }
@Test public void testTotalNoWrap() { StatsBuffer buffer = getNoWrap(); assertEquals(buffer.getTotalTime(), SIZE / 2 * (SIZE / 2 + 1) / 2); }
@Test public void testVarianceNoWrap() { StatsBuffer buffer = getNoWrap(); assertEquals(buffer.getVariance(), 20916.66667, 1e-4); }
@Test public void testMeanNoWrap() { StatsBuffer buffer = getNoWrap(); assertEquals(buffer.getMean(), SIZE / 4.0); }
@Test public void testCountNoWrap() { StatsBuffer buffer = getNoWrap(); assertEquals(buffer.getCount(), SIZE / 2 + 1); }
@Test public void testMaxNoWrap() { StatsBuffer buffer = getNoWrap(); assertEquals(buffer.getMax(), SIZE / 2); }
@Test public void testMinNoWrap() { StatsBuffer buffer = getNoWrap(); assertEquals(buffer.getMin(), 0); }
@Test public void testTotalWrap() { StatsBuffer buffer = getWithWrap(); assertEquals(buffer.getTotalTime(), EXPECTED_TOTAL_WRAP); }
@Test public void testCountWrap() { StatsBuffer buffer = getWithWrap(); assertEquals(buffer.getCount(), SIZE); }
// Used to access private count field via reflection so we can quickly simulate // a count that will cause an integer overflow. private void setCount(StatsBuffer buffer, int v) throws Exception { Class<?> cls = buffer.getClass(); Field field = cls.getDeclaredField("pos"); field.setAccessible(true); field.set(buffer, v); }
@Test public void testPercentiles995Wrap() { StatsBuffer buffer = getWithWrap(); double[] percentiles = buffer.getPercentileValues(); assertEquals(percentiles[3], 996.0); }
@Test public void testStdDevWrap() { StatsBuffer buffer = getWithWrap(); assertEquals(buffer.getStdDev(), Math.sqrt(EXPECTED_VARIANCE_WRAP), 1e-4); }
@Test public void testVarianceWrap() { StatsBuffer buffer = getWithWrap(); assertEquals(buffer.getVariance(), EXPECTED_VARIANCE_WRAP, 1e-4); }
@Test public void testMeanWrap() { StatsBuffer buffer = getWithWrap(); assertEquals(buffer.getMean(), (double) EXPECTED_TOTAL_WRAP / SIZE); }