private double getEstimateSize(int numBefore, int numAfter) { return getEstimateSize(numBefore, numAfter, 0); }
@Test public void testSmallSize() { for (int compression : compressions) { for (int i = compression; i < 4 * compression; i += compression / 3) { PercentileAggregator aggregator = createPercentileAggreator(i, null, compression); double estimate = getEstimateSize(i, 1, compression); assertTrue(Math.abs(getActualSize(aggregator) - estimate) / estimate < 0.3); aggregator.reset(); } } }
@Test public void testAggregation() throws Exception { for (int i = 5; i < 10; i += 3) { testAggregation(100000 * i); } }
@Test public void testLargeSize() throws Exception { for (int compression : compressions) { testPercentileSize(2000000, null, compression); } }
private void testAggregation(int numColumns) { List<PercentileAggregator> aggregators = Lists.newArrayList(); int mergeNum = new Random().nextInt(numColumns); for (int i = 1; i <= numColumns; i++) { mergeNum = new Random().nextInt(numColumns - mergeNum); PercentileAggregator aggregator1 = createPercentileAggreator(mergeNum, 10, null); aggregators.add(aggregator1); i = i + mergeNum; } double sum = 0.0; for (PercentileAggregator aggregator2 : aggregators) { sum += getActualSize(aggregator2); } assertTrue( Math.abs(aggregators.size() * getEstimateSize(numColumns, aggregators.size()) - sum) * 1.0 / sum < 0.5); aggregators.clear(); }
private void testPercentileSize(int sumNums, Integer sqrtNum, Integer compresion) throws Exception { compresion = compresion == null ? DEFAULT_COMPRESSION : compresion; PercentileAggregator aggregator = createPercentileAggreator(sumNums, sqrtNum, compresion); double actual = getActualSize(aggregator); double estimate = getEstimateSize((int) aggregator.getState().getRegisters().size(), 1, compresion); assertTrue(Math.abs(actual - estimate) / actual < 0.3); aggregator.reset(); }