@Test
  public void testRemove() {
    set.add(0, 1, 2, 3, 4);

    assertTrue(set.remove(2));
    assertFalse(set.remove(2));
    assertEquals(4, set.size());
    assertSortedListEquals(set.toArray(), 0, 1, 3, 4);
  }
  /**
   * Run some random insertions/ deletions and compare the results against <code>java.util.HashSet
   * </code>.
   */
  @Test
  public void testAgainstHashMap() {
    final java.util.Random rnd = new java.util.Random(0x11223344);
    final java.util.HashSet<Integer> other = new java.util.HashSet<Integer>();

    for (int size = 1000; size < 20000; size += 4000) {
      other.clear();
      set.clear();

      for (int round = 0; round < size * 20; round++) {
        Integer key = rnd.nextInt(size);

        if (rnd.nextBoolean()) {
          assertEquals(other.add(key), set.add(key));
          assertTrue(set.contains(key));
        } else {
          assertEquals(other.remove(key), set.remove(key));
        }

        assertEquals(other.size(), set.size());
      }

      int[] actual = set.toArray();
      int[] expected = new int[other.size()];
      int i = 0;
      for (Integer v : other) expected[i++] = v;
      Arrays.sort(expected);
      Arrays.sort(actual);
      assertArrayEquals(expected, actual);
    }
  }
  @Test
  public void testClone() {
    set.add(1, 2, 3);

    IntDoubleLinkedSet cloned = set.clone();
    cloned.remove(1);

    assertSortedListEquals(set.toArray(), 1, 2, 3);
    assertSortedListEquals(cloned.toArray(), 2, 3);
  }
  @Test
  public void testIterable() {
    set.add(1, 2, 2, 3, 4);
    set.remove(2);
    assertEquals(3, set.size());

    int count = 0;
    for (IntCursor cursor : set) {
      count++;
      assertTrue(set.contains(cursor.value));
    }
    assertEquals(count, set.size());

    set.clear();
    assertFalse(set.iterator().hasNext());
  }