public void testRetainAll() throws Exception {

    int[] ints = {1138, 42, 13, 86, 99, 101};

    TIntSet set = new TIntHashSet();
    set.addAll(ints);

    TIntSet other = new TIntHashSet();
    other.addAll(ints);

    int[] to_retain = {13, 86, 99, 1138};

    TIntSet retain_set = new TIntHashSet();
    retain_set.addAll(to_retain);

    List<Integer> retain_list = new ArrayList<Integer>();
    for (int element : to_retain) {
      retain_list.add(element);
    }

    assertFalse("retainAll(TIntSet) failed (same set): " + set, set.retainAll(set));
    // Contains all the original elements
    assertTrue(set.toString(), set.containsAll(ints));
    assertTrue(retain_set.toString(), retain_set.containsAll(to_retain));

    assertTrue("retainAll(Collection<?>) failed: " + set, set.retainAll(retain_list));
    // Contains just the expected elements
    assertFalse(set.toString(), set.containsAll(ints));
    assertTrue(set.toString(), set.containsAll(to_retain));
    assertTrue(retain_set.toString(), retain_set.containsAll(to_retain));

    // reset the set.
    set = new TIntHashSet();
    set.addAll(ints);
    assertTrue("retainAll(TIntSet) failed: " + set, set.retainAll(retain_set));
    // Contains just the expected elements
    assertFalse(set.toString(), set.containsAll(ints));
    assertTrue(set.toString(), set.containsAll(to_retain));
    assertTrue(retain_set.toString(), retain_set.containsAll(to_retain));

    // reset the set.
    set = new TIntHashSet();
    set.addAll(ints);
    assertTrue("retainAll(int[]) failed: " + set, set.retainAll(to_retain));
    // Contains just the expected elements
    assertFalse(set.toString(), set.containsAll(ints));
    assertTrue(set.toString(), set.containsAll(to_retain));
    assertTrue(retain_set.toString(), retain_set.containsAll(to_retain));
  }