public void testIterable() throws Exception {
    _store.clear();

    // Generate keys
    HashSet<String> keySet = new HashSet<String>(199);
    while (keySet.size() < 100) {
      keySet.add(UUID.randomUUID().toString());
    }
    assertEquals(100, keySet.size());

    // Populate store
    for (String key : keySet) {
      byte[] value = RandomBytes.getBytes();
      _store.put(key.getBytes(), value);
    }

    HashSet<String> keySet2 = new HashSet<String>(199);
    for (Entry<byte[], byte[]> e : _store) {
      keySet2.add(new String(e.getKey()));
    }

    assertEquals(keySet.size(), keySet2.size());

    keySet2.removeAll(keySet);
    assertEquals(0, keySet2.size());
  }
  public void testKeyIndexedIterator() throws Exception {
    IndexedIterator<byte[]> keyIter;

    _store.clear();
    keyIter = _store.keyIterator();
    assertFalse(keyIter.hasNext());

    // Generate keys
    HashSet<String> keySet = new HashSet<String>(199);
    while (keySet.size() < 100) {
      keySet.add(UUID.randomUUID().toString());
    }
    assertEquals(100, keySet.size());

    // Populate store
    for (String key : keySet) {
      byte[] value = RandomBytes.getBytes();
      _store.put(key.getBytes(), value);
    }

    // Check keys
    keyIter = _store.keyIterator();
    byte[] key1a = keyIter.next();

    keyIter.reset(0);
    byte[] key1b = keyIter.next();

    for (int i = 0; i < 10; i++) {
      keyIter.next();
    }
    keyIter.reset(keyIter.index());
    byte[] key1c = keyIter.next();

    assertTrue(Arrays.equals(key1a, key1b));

    // Re-open store
    _store.close();
    _store.open();

    // check keys
    keyIter = _store.keyIterator();
    byte[] key2a = keyIter.next();

    keyIter.reset(0);
    byte[] key2b = keyIter.next();

    for (int i = 0; i < 10; i++) {
      keyIter.next();
    }
    keyIter.reset(keyIter.index());
    byte[] key2c = keyIter.next();

    assertTrue(Arrays.equals(key1a, key2a));
    assertTrue(Arrays.equals(key1b, key2b));
    assertTrue(Arrays.equals(key1c, key2c));
  }