private static void testBigintFor(TypedSet typedSet, Block longBlock) { Set<Long> set = new HashSet<>(); for (int blockPosition = 0; blockPosition < longBlock.getPositionCount(); blockPosition++) { long number = BIGINT.getLong(longBlock, blockPosition); assertEquals(typedSet.contains(longBlock, blockPosition), set.contains(number)); assertEquals(typedSet.size(), set.size()); set.add(number); typedSet.add(longBlock, blockPosition); assertEquals(typedSet.contains(longBlock, blockPosition), set.contains(number)); assertEquals(typedSet.size(), set.size()); } } }
@Test public void testGetElementPositionWithProvidedEmptyBlockBuilder() { int elementCount = 100; // Set initialTypedSetEntryCount to a small number to trigger rehash() int initialTypedSetEntryCount = 10; BlockBuilder emptyBlockBuilder = BIGINT.createFixedSizeBlockBuilder(elementCount); TypedSet typedSet = new TypedSet(BIGINT, emptyBlockBuilder, initialTypedSetEntryCount, FUNCTION_NAME); BlockBuilder externalBlockBuilder = BIGINT.createFixedSizeBlockBuilder(elementCount); for (int i = 0; i < elementCount; i++) { if (i % 10 == 0) { externalBlockBuilder.appendNull(); } else { BIGINT.writeLong(externalBlockBuilder, i); } typedSet.add(externalBlockBuilder, i); } assertEquals(typedSet.size(), emptyBlockBuilder.getPositionCount()); assertEquals(typedSet.size(), elementCount - elementCount / 10 + 1); for (int j = 0; j < typedSet.size(); j++) { assertEquals(typedSet.positionOf(emptyBlockBuilder, j), j); } }
@Test public void testGetElementPosition() { int elementCount = 100; // Set initialTypedSetEntryCount to a small number to trigger rehash() int initialTypedSetEntryCount = 10; TypedSet typedSet = new TypedSet(BIGINT, initialTypedSetEntryCount, FUNCTION_NAME); BlockBuilder blockBuilder = BIGINT.createFixedSizeBlockBuilder(elementCount); for (int i = 0; i < elementCount; i++) { BIGINT.writeLong(blockBuilder, i); typedSet.add(blockBuilder, i); } assertEquals(typedSet.size(), elementCount); for (int j = 0; j < blockBuilder.getPositionCount(); j++) { assertEquals(typedSet.positionOf(blockBuilder, j), j); } }
assertEquals(typedSet.size(), secondBlockBuilder.getPositionCount() - elementCount); assertEquals(typedSet.size(), elementCount - elementCount / 10 + 1); for (int i = 0; i < typedSet.size(); i++) { int expectedPositionInSecondBlockBuilder = i + elementCount; assertEquals(typedSet.positionOf(secondBlockBuilder, expectedPositionInSecondBlockBuilder), expectedPositionInSecondBlockBuilder);
assertEquals(typedSet.size(), elementCount - elementCount / 10 + 1);
clearEntryIndices(keySet.size()); throw new PrestoException(INVALID_FUNCTION_ARGUMENT, "map entry cannot be null"); clearEntryIndices(keySet.size()); throw new PrestoException(INVALID_FUNCTION_ARGUMENT, "map key cannot be null"); entryIndicesList[keySet.size() - 1].add(i); for (int i = 0; i < keySet.size(); i++) { keyType.appendTo(rowType.getObject(block, entryIndicesList[i].getInt(0)), 0, singleMapWriter); BlockBuilder singleArrayWriter = singleMapWriter.beginBlockEntry(); clearEntryIndices(keySet.size()); return mapType.getObject(multimapBlockBuilder, multimapBlockBuilder.getPositionCount() - 1);
private static void testBigint(Block longBlock, int expectedSetSize) { TypedSet typedSet = new TypedSet(BIGINT, expectedSetSize); Set<Long> set = new HashSet<>(); for (int blockPosition = 0; blockPosition < longBlock.getPositionCount(); blockPosition++) { long number = BIGINT.getLong(longBlock, blockPosition); assertEquals(typedSet.contains(longBlock, blockPosition), set.contains(number)); assertEquals(typedSet.size(), set.size()); set.add(number); typedSet.add(longBlock, blockPosition); assertEquals(typedSet.contains(longBlock, blockPosition), set.contains(number)); assertEquals(typedSet.size(), set.size()); } } }