@Override
  @Test
  public void zip() {
    ImmutableSet<Integer> immutableSet = this.classUnderTest();
    List<Object> nulls = Collections.nCopies(immutableSet.size(), null);
    List<Object> nullsPlusOne = Collections.nCopies(immutableSet.size() + 1, null);

    ImmutableSet<Pair<Integer, Object>> pairs = immutableSet.zip(nulls);
    Assert.assertEquals(immutableSet, pairs.transform(Functions.<Integer>firstOfPair()));
    Assert.assertEquals(
        UnifiedSet.<Object>newSet(nulls), pairs.transform(Functions.<Object>secondOfPair()));

    ImmutableSet<Pair<Integer, Object>> pairsPlusOne = immutableSet.zip(nullsPlusOne);
    Assert.assertEquals(immutableSet, pairsPlusOne.transform(Functions.<Integer>firstOfPair()));
    Assert.assertEquals(
        UnifiedSet.<Object>newSet(nulls), pairsPlusOne.transform(Functions.<Object>secondOfPair()));

    Assert.assertEquals(
        immutableSet.zip(nulls),
        immutableSet.zip(nulls, UnifiedSet.<Pair<Integer, Object>>newSet()));
  }
  @Override
  @Test
  public void zipWithIndex() {
    ImmutableSet<Integer> immutableSet = this.classUnderTest();
    ImmutableSet<Pair<Integer, Integer>> pairs = immutableSet.zipWithIndex();

    Assert.assertEquals(immutableSet, pairs.transform(Functions.<Integer>firstOfPair()));
    Assert.assertEquals(
        UnifiedSet.<Integer>newSet(), pairs.transform(Functions.<Integer>secondOfPair()));

    Assert.assertEquals(
        immutableSet.zipWithIndex(),
        immutableSet.zipWithIndex(UnifiedSet.<Pair<Integer, Integer>>newSet()));
  }
 @Test
 public void cartesianProduct() {
   MutableSet<String> set =
       MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
   LazyIterable<Pair<String, String>> cartesianProduct =
       set.cartesianProduct(UnifiedSet.newSetWith("One", "Two"));
   Verify.assertIterableSize(set.size() * 2, cartesianProduct);
   Assert.assertEquals(
       set,
       cartesianProduct
           .filter(Predicates.attributeEqual(Functions.<String>secondOfPair(), "One"))
           .transform(Functions.<String>firstOfPair())
           .toSet());
 }