private static double mapDotProduct(Block leftMap, Block rightMap) { TypedSet rightMapKeys = new TypedSet(VARCHAR, rightMap.getPositionCount(), "cosine_similarity"); for (int i = 0; i < rightMap.getPositionCount(); i += 2) { rightMapKeys.add(rightMap, i); } double result = 0.0; for (int i = 0; i < leftMap.getPositionCount(); i += 2) { int position = rightMapKeys.positionOf(leftMap, i); if (position != -1) { result += DOUBLE.getDouble(leftMap, i + 1) * DOUBLE.getDouble(rightMap, 2 * position + 1); } } return result; }
@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.positionOf(blockBuilder, j), j - nullCount + 1); assertEquals(typedSet.positionOf(blockBuilder, j), 0); nullCount++;
private void testGetElementPositionRandomFor(TypedSet set) { BlockBuilder keys = VARCHAR.createBlockBuilder(null, 5); VARCHAR.writeSlice(keys, utf8Slice("hello")); VARCHAR.writeSlice(keys, utf8Slice("bye")); VARCHAR.writeSlice(keys, utf8Slice("abc")); for (int i = 0; i < keys.getPositionCount(); i++) { set.add(keys, i); } BlockBuilder values = VARCHAR.createBlockBuilder(null, 5); VARCHAR.writeSlice(values, utf8Slice("bye")); VARCHAR.writeSlice(values, utf8Slice("abc")); VARCHAR.writeSlice(values, utf8Slice("hello")); VARCHAR.writeSlice(values, utf8Slice("bad")); values.appendNull(); assertEquals(set.positionOf(values, 4), -1); assertEquals(set.positionOf(values, 2), 0); assertEquals(set.positionOf(values, 1), 2); assertEquals(set.positionOf(values, 0), 1); assertFalse(set.contains(values, 3)); set.add(values, 4); assertTrue(set.contains(values, 4)); }
@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); } }
assertEquals(typedSet.positionOf(secondBlockBuilder, expectedPositionInSecondBlockBuilder), expectedPositionInSecondBlockBuilder);
keyType.appendTo(key, keyValueIndex, distinctKeyBlockBuilder); BlockBuilder valueArrayBuilder = valueType.createBlockBuilder(null, 10, expectedValueSize(valueType, EXPECTED_ENTRY_SIZE)); valueArrayBlockBuilders.set(keySet.positionOf(key, keyValueIndex), valueArrayBuilder); valueType.appendTo(value, keyValueIndex, valueArrayBlockBuilders.get(keySet.positionOf(key, keyValueIndex))); });
entryIndicesList[keySet.positionOf(rowBlock, 0)].add(i);
@Test public void testGetElementPosition() throws Exception { int elementCount = 100; TypedSet typedSet = new TypedSet(BIGINT, elementCount); BlockBuilder blockBuilder = BIGINT.createFixedSizeBlockBuilder(elementCount); for (int i = 0; i < elementCount; i++) { BIGINT.writeLong(blockBuilder, i); typedSet.add(blockBuilder, i); } for (int j = 0; j < blockBuilder.getPositionCount(); j++) { assertEquals(typedSet.positionOf(blockBuilder, j), j); } }
keyType.appendTo(keys, keyValueIndex, distinctKeyBlockBuilder); BlockBuilder valueArrayBuilder = valueType.createBlockBuilder(new BlockBuilderStatus(), 10, expectedValueSize(valueType, EXPECTED_ENTRY_SIZE)); valueArrayBlockBuilders.set(keySet.positionOf(keys, keyValueIndex), valueArrayBuilder); valueType.appendTo(values, keyValueIndex, valueArrayBlockBuilders.get(keySet.positionOf(keys, keyValueIndex)));