@Test public void testGetNonExistent() throws Exception { random = new Random(98222); VectorMapJoinFastMultiKeyHashMultiSet map = new VectorMapJoinFastMultiKeyHashMultiSet( false,CAPACITY, LOAD_FACTOR, WB_SIZE, -1); VerifyFastBytesHashMultiSet verifyTable = new VerifyFastBytesHashMultiSet(); byte[] key1 = new byte[random.nextInt(MAX_KEY_LENGTH)]; random.nextBytes(key1); map.testPutRow(key1); verifyTable.add(key1); verifyTable.verify(map); byte[] key2 = new byte[random.nextInt(MAX_KEY_LENGTH)]; random.nextBytes(key2); VectorMapJoinHashMultiSetResult hashMultiSetResult = map.createHashMultiSetResult(); JoinUtil.JoinResult joinResult = map.contains(key2, 0, key2.length, hashMultiSetResult); assertTrue(joinResult == JoinUtil.JoinResult.NOMATCH); map.testPutRow(key2); verifyTable.add(key2); verifyTable.verify(map); byte[] key3 = new byte[random.nextInt(MAX_KEY_LENGTH)]; random.nextBytes(key3); hashMultiSetResult = map.createHashMultiSetResult(); joinResult = map.contains(key3, 0, key3.length, hashMultiSetResult); assertTrue(joinResult == JoinUtil.JoinResult.NOMATCH); assertEquals(hashMultiSetResult.count(), 0); }
@VisibleForTesting public void testPutRow(byte[] currentKey) throws HiveException, IOException { if (testKeyBytesWritable == null) { testKeyBytesWritable = new BytesWritable(); } testKeyBytesWritable.set(currentKey, 0, currentKey.length); putRow(testKeyBytesWritable, null); }
@Test public void testLargeAndExpand() throws Exception { random = new Random(5637); // Use a large capacity that doesn't require expansion, yet. VectorMapJoinFastMultiKeyHashMultiSet map = new VectorMapJoinFastMultiKeyHashMultiSet( false,MODERATE_CAPACITY, LOAD_FACTOR, MODERATE_WB_SIZE, -1); VerifyFastBytesHashMultiSet verifyTable = new VerifyFastBytesHashMultiSet(); int keyCount = 1000; addAndVerifyMultipleKeyMultipleValue(keyCount, map, verifyTable); } }
@Test public void testOneKey() throws Exception { random = new Random(5255); VectorMapJoinFastMultiKeyHashMultiSet map = new VectorMapJoinFastMultiKeyHashMultiSet( false,CAPACITY, LOAD_FACTOR, WB_SIZE, -1); VerifyFastBytesHashMultiSet verifyTable = new VerifyFastBytesHashMultiSet(); byte[] key = new byte[random.nextInt(MAX_KEY_LENGTH)]; random.nextBytes(key); map.testPutRow(key); verifyTable.add(key); verifyTable.verify(map); // Second time. map.testPutRow(key); verifyTable.add(key); verifyTable.verify(map); // Third time. map.testPutRow(key); verifyTable.add(key); verifyTable.verify(map); }
public void addAndVerifyMultipleKeyMultipleValue(int keyCount, VectorMapJoinFastMultiKeyHashMultiSet map, VerifyFastBytesHashMultiSet verifyTable) throws HiveException, IOException { for (int i = 0; i < keyCount; i++) { byte[] value = new byte[generateLargeCount() - 1]; random.nextBytes(value); // Add a new key or add a value to an existing key? if (random.nextBoolean() || verifyTable.getCount() == 0) { byte[] key; while (true) { key = new byte[random.nextInt(MAX_KEY_LENGTH)]; random.nextBytes(key); if (!verifyTable.contains(key)) { // Unique keys for this test. break; } } map.testPutRow(key); verifyTable.add(key); // verifyTable.verify(map); } else { byte[] randomExistingKey = verifyTable.addRandomExisting(value, random); map.testPutRow(randomExistingKey); // verifyTable.verify(map); } } verifyTable.verify(map); } @Test
@Test public void testMultipleKeysMultipleValue() throws Exception { random = new Random(5445); // Use a large capacity that doesn't require expansion, yet. VectorMapJoinFastMultiKeyHashMultiSet map = new VectorMapJoinFastMultiKeyHashMultiSet( false,LARGE_CAPACITY, LOAD_FACTOR, LARGE_WB_SIZE, -1); VerifyFastBytesHashMultiSet verifyTable = new VerifyFastBytesHashMultiSet(); int keyCount = 1000; addAndVerifyMultipleKeyMultipleValue(keyCount, map, verifyTable); }
@Test public void testMultipleKeysSingleValue() throws Exception { random = new Random(2374); VectorMapJoinFastMultiKeyHashMultiSet map = new VectorMapJoinFastMultiKeyHashMultiSet( false,CAPACITY, LOAD_FACTOR, WB_SIZE, -1); VerifyFastBytesHashMultiSet verifyTable = new VerifyFastBytesHashMultiSet(); int keyCount = 100 + random.nextInt(1000); for (int i = 0; i < keyCount; i++) { byte[] key = new byte[random.nextInt(MAX_KEY_LENGTH)]; random.nextBytes(key); if (!verifyTable.contains(key)) { // Unique keys for this test. break; } map.testPutRow(key); verifyTable.add(key); // verifyTable.verify(map); } verifyTable.verify(map); }
new VectorMapJoinFastMultiKeyHashMultiSet(false,CAPACITY, 1f, WB_SIZE, -1); map.testPutRow(key); verifyTable.add(key); VectorMapJoinHashMultiSetResult hashMultiSetResult = map.createHashMultiSetResult(); JoinUtil.JoinResult joinResult = map.contains(anotherKey, 0, anotherKey.length, hashMultiSetResult); assertTrue(joinResult == JoinUtil.JoinResult.NOMATCH);
break; case HASH_MULTISET: hashTable = new VectorMapJoinFastMultiKeyHashMultiSet( isFullOuter, newThreshold, loadFactor, writeBufferSize, estimatedKeyCount);
@Test public void testExpand() throws Exception { random = new Random(2933); // Start with capacity 1; make sure we expand on every put. VectorMapJoinFastMultiKeyHashMultiSet map = new VectorMapJoinFastMultiKeyHashMultiSet(false,1, 0.0000001f, WB_SIZE, -1); VerifyFastBytesHashMultiSet verifyTable = new VerifyFastBytesHashMultiSet(); for (int i = 0; i < 18; ++i) { byte[] key; while (true) { key = new byte[random.nextInt(MAX_KEY_LENGTH)]; random.nextBytes(key); if (!verifyTable.contains(key)) { // Unique keys for this test. break; } } map.testPutRow(key); verifyTable.add(key); // verifyTable.verify(map); } verifyTable.verify(map); // assertEquals(1 << 18, map.getCapacity()); }
@VisibleForTesting public void testPutRow(byte[] currentKey) throws HiveException, IOException { if (testKeyBytesWritable == null) { testKeyBytesWritable = new BytesWritable(); } testKeyBytesWritable.set(currentKey, 0, currentKey.length); putRow(testKeyBytesWritable, null); }
break; case HASH_MULTISET: hashTable = new VectorMapJoinFastMultiKeyHashMultiSet( isOuterJoin, newThreshold, loadFactor, writeBufferSize, estimatedKeyCount);
break; case HASH_MULTISET: hashTable = new VectorMapJoinFastMultiKeyHashMultiSet( isOuterJoin, newThreshold, loadFactor, writeBufferSize);