use of com.facebook.presto.spi.function.GroupedAccumulatorState in project presto by prestodb.
the class TestStateCompiler method testComplexStateEstimatedSize.
@Test
public void testComplexStateEstimatedSize() {
Map<String, Type> fieldMap = ImmutableMap.of("Block", new ArrayType(BIGINT), "AnotherBlock", new MapType(BIGINT, VARCHAR));
AccumulatorStateFactory<TestComplexState> factory = StateCompiler.generateStateFactory(TestComplexState.class, fieldMap, new DynamicClassLoader(TestComplexState.class.getClassLoader()));
TestComplexState groupedState = factory.createGroupedState();
assertEquals(groupedState.getEstimatedSize(), 76064);
for (int i = 0; i < 1000; i++) {
((GroupedAccumulatorState) groupedState).setGroupId(i);
groupedState.setBoolean(true);
groupedState.setLong(1);
groupedState.setDouble(2.0);
groupedState.setByte((byte) 3);
groupedState.setSlice(utf8Slice("test"));
groupedState.setAnotherSlice(wrappedDoubleArray(1.0, 2.0, 3.0));
groupedState.setYetAnotherSlice(null);
Block array = createLongsBlock(45);
groupedState.setBlock(array);
BlockBuilder mapBlockBuilder = new InterleavedBlockBuilder(ImmutableList.of(BIGINT, VARCHAR), new BlockBuilderStatus(), 1);
BIGINT.writeLong(mapBlockBuilder, 123L);
VARCHAR.writeSlice(mapBlockBuilder, utf8Slice("testBlock"));
Block map = mapBlockBuilder.build();
groupedState.setAnotherBlock(map);
assertEquals(groupedState.getEstimatedSize(), 76064 + 1274 * (i + 1));
}
for (int i = 0; i < 1000; i++) {
((GroupedAccumulatorState) groupedState).setGroupId(i);
groupedState.setBoolean(true);
groupedState.setLong(1);
groupedState.setDouble(2.0);
groupedState.setByte((byte) 3);
groupedState.setSlice(utf8Slice("test"));
groupedState.setAnotherSlice(wrappedDoubleArray(1.0, 2.0, 3.0));
groupedState.setYetAnotherSlice(null);
Block array = createLongsBlock(45);
groupedState.setBlock(array);
BlockBuilder mapBlockBuilder = new InterleavedBlockBuilder(ImmutableList.of(BIGINT, VARCHAR), new BlockBuilderStatus(), 1);
BIGINT.writeLong(mapBlockBuilder, 123L);
VARCHAR.writeSlice(mapBlockBuilder, utf8Slice("testBlock"));
Block map = mapBlockBuilder.build();
groupedState.setAnotherBlock(map);
assertEquals(groupedState.getEstimatedSize(), 76064 + 1274 * 1000);
}
}
Aggregations