/** Test that the full list iterator contract is correct. */
  public void testFullMapIterator() {
    if (supportsFullIterator() == false) {
      return;
    }

    super.testFullMapIterator();

    OrderedMapIterator it = makeFullOrderedMapIterator();
    Map map = getMap();

    assertEquals(true, it.hasNext());
    assertEquals(false, it.hasPrevious());
    Set set = new HashSet();
    while (it.hasNext()) {
      // getKey
      Object key = it.next();
      assertSame("it.next() should equals getKey()", key, it.getKey());
      assertTrue("Key must be in map", map.containsKey(key));
      assertTrue("Key must be unique", set.add(key));

      // getValue
      Object value = it.getValue();
      if (isGetStructuralModify() == false) {
        assertSame("Value must be mapped to key", map.get(key), value);
      }
      assertTrue("Value must be in map", map.containsValue(value));

      assertEquals(true, it.hasPrevious());

      verify();
    }
    while (it.hasPrevious()) {
      // getKey
      Object key = it.previous();
      assertSame("it.previous() should equals getKey()", key, it.getKey());
      assertTrue("Key must be in map", map.containsKey(key));
      assertTrue("Key must be unique", set.remove(key));

      // getValue
      Object value = it.getValue();
      if (isGetStructuralModify() == false) {
        assertSame("Value must be mapped to key", map.get(key), value);
      }
      assertTrue("Value must be in map", map.containsValue(value));

      assertEquals(true, it.hasNext());

      verify();
    }
  }
  /** Test that the empty list iterator contract is correct. */
  public void testEmptyMapIterator() {
    if (supportsEmptyIterator() == false) {
      return;
    }

    super.testEmptyMapIterator();

    OrderedMapIterator it = makeEmptyOrderedMapIterator();
    Map map = getMap();
    assertEquals(false, it.hasPrevious());
    try {
      it.previous();
      fail();
    } catch (NoSuchElementException ex) {
    }
  }