@Test
  public void testCursor_advance() {
    hsa.ensure(randomKey(), randomKey());

    HashSlotCursor16byteKey cursor = hsa.cursor();
    assertTrue(cursor.advance());
    assertFalse(cursor.advance());
  }
  @Test
  public void testCursor_advance_afterAdvanceReturnsFalse() {
    hsa.ensure(randomKey(), randomKey());

    HashSlotCursor16byteKey cursor = hsa.cursor();
    cursor.advance();
    cursor.advance();

    try {
      cursor.advance();
      fail("cursor.advance() returned false, but subsequent call did not throw AssertionError");
    } catch (AssertionError ignored) {
    }
  }
  @Test
  public void testCursor_withManyValues() {
    final long factor = 123456;
    final int k = 1000;

    for (int i = 1; i <= k; i++) {
      long key1 = (long) i;
      long key2 = key1 * factor;
      hsa.ensure(key1, key2);
    }

    boolean[] verifyKeys = new boolean[k];
    Arrays.fill(verifyKeys, false);

    HashSlotCursor16byteKey cursor = hsa.cursor();
    while (cursor.advance()) {
      long key1 = cursor.key1();
      long key2 = cursor.key2();

      assertEquals(key1 * factor, key2);
      verifyKeys[((int) key1) - 1] = true;
    }

    for (int i = 0; i < k; i++) {
      assertTrue("Haven't read " + k + "th key!", verifyKeys[i]);
    }
  }
 @Test(expected = AssertionError.class)
 @RequireAssertEnabled
 public void testCursor_advance_whenDisposed() {
   HashSlotCursor16byteKey cursor = hsa.cursor();
   hsa.dispose();
   cursor.advance();
 }
  @Test
  public void testCursor_valueAddress() {
    final long valueAddress = hsa.ensure(randomKey(), randomKey());

    HashSlotCursor16byteKey cursor = hsa.cursor();
    cursor.advance();
    assertEquals(valueAddress, cursor.valueAddress());
  }
  @Test
  public void testCursor_key2() {
    final long key1 = randomKey();
    final long key2 = randomKey();
    hsa.ensure(key1, key2);

    HashSlotCursor16byteKey cursor = hsa.cursor();
    cursor.advance();
    assertEquals(key2, cursor.key2());
  }
 @Test
 public void testCursor_advance_whenEmpty() {
   HashSlotCursor16byteKey cursor = hsa.cursor();
   assertFalse(cursor.advance());
 }