public void addAndVerifyMultipleKeyMultipleValue(int keyCount, VectorMapJoinFastMultiKeyHashSet map, VerifyFastBytesHashSet 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 testOneKey() throws Exception { random = new Random(81104); VectorMapJoinFastMultiKeyHashSet map = new VectorMapJoinFastMultiKeyHashSet( false, CAPACITY, LOAD_FACTOR, WB_SIZE, -1); VerifyFastBytesHashSet verifyTable = new VerifyFastBytesHashSet(); 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); }
@Test public void testMultipleKeysSingleValue() throws Exception { random = new Random(1120); VectorMapJoinFastMultiKeyHashSet map = new VectorMapJoinFastMultiKeyHashSet( false, CAPACITY, LOAD_FACTOR, WB_SIZE, -1); VerifyFastBytesHashSet verifyTable = new VerifyFastBytesHashSet(); 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); }
@Test public void testExpand() throws Exception { random = new Random(773); // Start with capacity 1; make sure we expand on every put. VectorMapJoinFastMultiKeyHashSet map = new VectorMapJoinFastMultiKeyHashSet( false, 1, 0.0000001f, WB_SIZE, -1); VerifyFastBytesHashSet verifyTable = new VerifyFastBytesHashSet(); 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()); }
@Test public void testGetNonExistent() throws Exception { random = new Random(2293); VectorMapJoinFastMultiKeyHashSet map = new VectorMapJoinFastMultiKeyHashSet( false, CAPACITY, LOAD_FACTOR, WB_SIZE, -1); VerifyFastBytesHashSet verifyTable = new VerifyFastBytesHashSet(); 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); VectorMapJoinHashSetResult hashSetResult = map.createHashSetResult(); JoinUtil.JoinResult joinResult = map.contains(key2, 0, key2.length, hashSetResult); 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); hashSetResult = map.createHashSetResult(); joinResult = map.contains(key3, 0, key3.length, hashSetResult); assertTrue(joinResult == JoinUtil.JoinResult.NOMATCH); }
map.testPutRow(key); verifyTable.add(key);