@Test public void testReplaceAllValues() throws Exception { int numKeys = 1000; int numValuesPerKeys = 1000; Map map = createAndFillMap(DIRECTORY, numKeys, numValuesPerKeys); for (int i = 0; i < numKeys; ++i) { long expectedNumReplaced = 1; long actualNumRemoved = map.replaceAllEqual(makeKey(i), makeValue(123), makeValue(124)); Assert.assertEquals(expectedNumReplaced, actualNumRemoved); } for (int i = 0; i < numKeys; ++i) { Iterator iter = map.get(makeKey(i)); for (int j = 0; j < numValuesPerKeys; ++j) { if (j == 123) { // This value has been removed. } else { Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(makeValue(j), iter.nextAsByteArray()); } } // The last element is the replaced value. Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(makeValue(124), iter.nextAsByteArray()); Assert.assertFalse(iter.hasNext()); Assert.assertEquals(0, iter.available()); iter.close(); } map.close(); }
@Test public void testReplaceAllValuesViaFunction() throws Exception { int numKeys = 1000; int numValuesPerKeys = 1000; Map map = createAndFillMap(DIRECTORY, numKeys, numValuesPerKeys); for (int i = 0; i < numKeys; ++i) { long expectedNumReplaced = numValuesPerKeys / 2; long actualNumReplaced = map.replaceAllMatches(makeKey(i), NEXT_IF_EVEN); Assert.assertEquals(expectedNumReplaced, actualNumReplaced); } for (int i = 0; i < numKeys; ++i) { Iterator iter = map.get(makeKey(i)); for (int j = 1; j < numValuesPerKeys; j += 2) { Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(makeValue(j), iter.nextAsByteArray()); } // Replaced values have been inserted at the end. for (int j = 1; j < numValuesPerKeys; j += 2) { Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(makeValue(j), iter.nextAsByteArray()); } Assert.assertFalse(iter.hasNext()); Assert.assertEquals(0, iter.available()); iter.close(); } map.close(); }
@Test public void testReplaceOneValueViaFunction() throws Exception { int numKeys = 1000; int numValuesPerKeys = 1000; Map map = createAndFillMap(DIRECTORY, numKeys, numValuesPerKeys); for (int i = 0; i < numKeys; ++i) { boolean replaced = map.replaceFirstMatch(makeKey(i), NEXT_IF_EVEN); Assert.assertTrue(replaced); } for (int i = 0; i < numKeys; ++i) { Iterator iter = map.get(makeKey(i)); for (int j = 1; j < numValuesPerKeys; ++j) { Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(makeValue(j), iter.nextAsByteArray()); } // The last element is the replaced value. Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(makeValue(1), iter.nextAsByteArray()); Assert.assertFalse(iter.hasNext()); Assert.assertEquals(0, iter.available()); iter.close(); } map.close(); }
@Test public void testRemoveOneValueViaPredicate() throws Exception { int numKeys = 1000; int numValuesPerKeys = 1000; Map map = createAndFillMap(DIRECTORY, numKeys, numValuesPerKeys); for (int i = 0; i < numKeys; ++i) { boolean removed = map.removeFirstMatch(makeKey(i), IS_EVEN); Assert.assertTrue(removed); } for (int i = 0; i < numKeys; ++i) { Iterator iter = map.get(makeKey(i)); int j = 0; for (; j < numValuesPerKeys; ++j) { byte[] value = makeValue(j); if (IS_EVEN.call(ByteBuffer.wrap(value))) { // This value has been removed. break; } else { Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(value, iter.nextAsByteArray()); } } for (++j; j < numValuesPerKeys; ++j) { Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(makeValue(j), iter.nextAsByteArray()); } Assert.assertFalse(iter.hasNext()); Assert.assertEquals(0, iter.available()); iter.close(); } map.close(); }
@Test public void testRemoveOneValue() throws Exception { int numKeys = 1000; int numValuesPerKeys = 1000; Map map = createAndFillMap(DIRECTORY, numKeys, numValuesPerKeys); for (int i = 0; i < numKeys; ++i) { boolean removed = map.removeFirstEqual(makeKey(i), makeValue(123)); Assert.assertTrue(removed); } for (int i = 0; i < numKeys; ++i) { Iterator iter = map.get(makeKey(i)); int j = 0; for (; j < numValuesPerKeys; ++j) { if (j == 123) { // This value has been removed. break; } else { Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(makeValue(j), iter.nextAsByteArray()); } } for (++j; j < numValuesPerKeys; ++j) { Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(makeValue(j), iter.nextAsByteArray()); } Assert.assertFalse(iter.hasNext()); Assert.assertEquals(0, iter.available()); iter.close(); } map.close(); }
@Test public void testRemoveAllValuesViaPredicate() throws Exception { int numKeys = 1000; int numValuesPerKeys = 1000; Map map = createAndFillMap(DIRECTORY, numKeys, numValuesPerKeys); for (int i = 0; i < numKeys; ++i) { long expectedNumRemoved = numValuesPerKeys / 2; long actualNumRemoved = map.removeAllMatches(makeKey(i), IS_EVEN); Assert.assertEquals(expectedNumRemoved, actualNumRemoved); } for (int i = 0; i < numKeys; ++i) { Iterator iter = map.get(makeKey(i)); for (int j = 0; j < numValuesPerKeys; ++j) { byte[] value = makeValue(j); if (IS_EVEN.call(ByteBuffer.wrap(value))) { // This value has been removed. } else { Assert.assertTrue(iter.hasNext()); Assert.assertArrayEquals(value, iter.nextAsByteArray()); } } Assert.assertFalse(iter.hasNext()); Assert.assertEquals(0, iter.available()); iter.close(); } map.close(); }
@Test public void testGet() throws Exception { int numKeys = 1000; int numValuesPerKeys = 1000; Map map = createAndFillMap(DIRECTORY, numKeys, numValuesPerKeys); for (int i = 0; i < numKeys; ++i) { Iterator iter = map.get(makeKey(i)); for (int j = 0; j < numValuesPerKeys; ++j) { Assert.assertTrue(iter.hasNext()); Assert.assertEquals(numValuesPerKeys - j, iter.available()); Assert.assertArrayEquals(makeValue(j), iter.nextAsByteArray()); } Assert.assertFalse(iter.hasNext()); Assert.assertEquals(0, iter.available()); iter.close(); } map.close(); }