@Test
  public void testPowerSet() {
    final ImmutableBitSet empty = ImmutableBitSet.of();
    assertThat(Iterables.size(empty.powerSet()), equalTo(1));
    assertThat(empty.powerSet().toString(), equalTo("[{}]"));

    final ImmutableBitSet single = ImmutableBitSet.of(2);
    assertThat(Iterables.size(single.powerSet()), equalTo(2));
    assertThat(single.powerSet().toString(), equalTo("[{}, {2}]"));

    final ImmutableBitSet two = ImmutableBitSet.of(2, 10);
    assertThat(Iterables.size(two.powerSet()), equalTo(4));
    assertThat(two.powerSet().toString(), equalTo("[{}, {10}, {2}, {2, 10}]"));

    final ImmutableBitSet seventeen = ImmutableBitSet.range(3, 20);
    assertThat(Iterables.size(seventeen.powerSet()), equalTo(131072));
  }
 /**
  * Tests the method {@link
  * org.apache.calcite.util.ImmutableBitSet#contains(org.apache.calcite.util.ImmutableBitSet)}.
  */
 @Test
 public void testBitSetsContains() {
   assertTrue(ImmutableBitSet.range(0, 5).contains(ImmutableBitSet.range(2, 4)));
   assertTrue(ImmutableBitSet.range(0, 5).contains(ImmutableBitSet.range(4)));
   assertFalse(ImmutableBitSet.range(0, 5).contains(ImmutableBitSet.of(14)));
   assertFalse(ImmutableBitSet.range(20, 25).contains(ImmutableBitSet.of(14)));
   final ImmutableBitSet empty = ImmutableBitSet.of();
   assertTrue(ImmutableBitSet.range(20, 25).contains(empty));
   assertTrue(empty.contains(empty));
   assertFalse(empty.contains(ImmutableBitSet.of(0)));
   assertFalse(empty.contains(ImmutableBitSet.of(1)));
   assertFalse(empty.contains(ImmutableBitSet.of(63)));
   assertFalse(empty.contains(ImmutableBitSet.of(64)));
   assertFalse(empty.contains(ImmutableBitSet.of(1000)));
   assertTrue(ImmutableBitSet.of(1, 4, 7).contains(ImmutableBitSet.of(1, 4, 7)));
 }
  /** Tests the method {@link BitSets#range(int, int)}. */
  @Test
  public void testRange() {
    assertEquals(ImmutableBitSet.range(0, 4).toList(), Arrays.asList(0, 1, 2, 3));
    assertEquals(ImmutableBitSet.range(1, 4).toList(), Arrays.asList(1, 2, 3));
    assertEquals(ImmutableBitSet.range(4).toList(), Arrays.asList(0, 1, 2, 3));
    assertEquals(ImmutableBitSet.range(0).toList(), Collections.<Integer>emptyList());
    assertEquals(ImmutableBitSet.range(2, 2).toList(), Collections.<Integer>emptyList());

    assertThat(ImmutableBitSet.range(63, 66).toString(), equalTo("{63, 64, 65}"));
    assertThat(ImmutableBitSet.range(65, 68).toString(), equalTo("{65, 66, 67}"));
    assertThat(ImmutableBitSet.range(65, 65).toString(), equalTo("{}"));
    assertThat(ImmutableBitSet.range(65, 65).length(), equalTo(0));
    assertThat(ImmutableBitSet.range(65, 165).cardinality(), equalTo(100));

    // Same tests as above, using a builder.
    assertThat(ImmutableBitSet.builder().set(63, 66).build().toString(), equalTo("{63, 64, 65}"));
    assertThat(ImmutableBitSet.builder().set(65, 68).build().toString(), equalTo("{65, 66, 67}"));
    assertThat(ImmutableBitSet.builder().set(65, 65).build().toString(), equalTo("{}"));
    assertThat(ImmutableBitSet.builder().set(65, 65).build().length(), equalTo(0));
    assertThat(ImmutableBitSet.builder().set(65, 165).build().cardinality(), equalTo(100));

    final ImmutableBitSet e0 = ImmutableBitSet.range(0, 0);
    final ImmutableBitSet e1 = ImmutableBitSet.of();
    assertTrue(e0.equals(e1));
    assertThat(e0.hashCode(), equalTo(e1.hashCode()));

    // Empty builder returns the singleton empty set.
    assertTrue(ImmutableBitSet.builder().build() == ImmutableBitSet.of());
  }