use of com.linkedin.pinot.core.query.aggregation.groupby.DoubleGroupByResultHolder in project pinot by linkedin.
the class DoubleGroupByResultHolderTest method testTrimResults.
/**
* Helper method for testing trim results.
* Sets a max size on the result holder and adds more values than the max size of the result holder.
* Then asserts that the right results survive after trimming.
*
* @param minOrder
*/
void testTrimResults(final boolean minOrder) {
GroupByResultHolder resultHolder = new DoubleGroupByResultHolder(INITIAL_CAPACITY, MAX_CAPACITY, INITIAL_CAPACITY, DEFAULT_VALUE, minOrder);
List<IntDoublePair> expected = new ArrayList<>(MAX_CAPACITY);
for (int i = 0; i < INITIAL_CAPACITY; i++) {
resultHolder.setValueForKey(i, _expected[i]);
expected.add(new IntDoublePair(i, _expected[i]));
}
// This will trigger the transition from array based to map based storage within the result holder.
resultHolder.ensureCapacity(MAX_CAPACITY);
for (int i = INITIAL_CAPACITY; i < MAX_CAPACITY; i++) {
resultHolder.setValueForKey(i, _expected[i]);
expected.add(new IntDoublePair(i, _expected[i]));
}
// Trim the results.
resultHolder.trimResults();
// Sort the input
Collections.sort(expected, new IntDoubleComparator(!minOrder));
// Ensure that all the correct group keys survive after trimming.
for (int i = 0; i < INITIAL_CAPACITY; i++) {
IntDoublePair pair = expected.get(i);
Assert.assertEquals(resultHolder.getDoubleResult(pair.getIntValue()), pair.getDoubleValue());
}
}
use of com.linkedin.pinot.core.query.aggregation.groupby.DoubleGroupByResultHolder in project pinot by linkedin.
the class DoubleGroupByResultHolderTest method testSetValueForKey.
/**
* This test is for the GroupByResultHolder.SetValueForKey() api.
* - Sets a random set of values in the result holder.
* - Asserts that the values returned by the result holder are as expected.
*/
@Test
void testSetValueForKey() {
GroupByResultHolder resultHolder = new DoubleGroupByResultHolder(INITIAL_CAPACITY, MAX_CAPACITY, MAX_CAPACITY, DEFAULT_VALUE);
for (int i = 0; i < INITIAL_CAPACITY; i++) {
resultHolder.setValueForKey(i, _expected[i]);
}
testValues(resultHolder, _expected, 0, INITIAL_CAPACITY);
}
use of com.linkedin.pinot.core.query.aggregation.groupby.DoubleGroupByResultHolder in project pinot by linkedin.
the class DoubleGroupByResultHolderTest method testEnsureCapacity.
/**
* This test is for the GroupByResultHolder.EnsureCapacity api.
* - Fills the the result holder with a set of values.
* - Calls ensureCapacity to expand the result holder size.
* - Checks that the expanded unfilled portion of the result holder contains {@ref #DEFAULT_VALUE}
* - Fills the rest of the resultHolder, and ensures all values are returned as expected.
*/
@Test
void testEnsureCapacity() {
GroupByResultHolder resultHolder = new DoubleGroupByResultHolder(INITIAL_CAPACITY, MAX_CAPACITY, MAX_CAPACITY, DEFAULT_VALUE);
for (int i = 0; i < INITIAL_CAPACITY; i++) {
resultHolder.setValueForKey(i, _expected[i]);
}
resultHolder.ensureCapacity(MAX_CAPACITY);
for (int i = INITIAL_CAPACITY; i < MAX_CAPACITY; i++) {
double actual = resultHolder.getDoubleResult(i);
Assert.assertEquals(actual, DEFAULT_VALUE, "Default Value mis-match: Actual: " + actual + " Expected: " + DEFAULT_VALUE + " Random seed: " + RANDOM_SEED);
resultHolder.setValueForKey(i, _expected[i]);
}
testValues(resultHolder, _expected, 0, MAX_CAPACITY);
}
Aggregations