@Test
  public void testRank() {
    // first block
    assertEquals(bv.rank(0L), 1L);
    assertEquals(bv.rank(1L), 2L);
    assertEquals(bv.rank(63L), 36L);
    // second block
    assertEquals(bv.rank(64L), 37L);
    assertEquals(bv.rank(65L), 37L);
    assertEquals(bv.rank(71L), 37L);
    assertEquals(bv.rank(72L), 38L);
    // third block
    assertEquals(bv.rank(128L), 44L);

    // second super block
    assertEquals(bv.rank(256L), 109L);
    // third super block
    assertEquals(bv.rank(512L), 217L);
    // fourth super block
    assertEquals(bv.rank(768L), 325L);
    // fourth super block, first block
    assertEquals(bv.rank(799L), 356L);
    // fourth super block, second block
    assertEquals(bv.rank(840L), 362L);
  }
  @BeforeMethod
  public void prepare() {
    conf = new HashMap();
    conf.put(GMMNSequencial.CONF_SUPERBLOCK_STEP, new Integer(4));

    BitVector64 origin = new BitVector64();
    origin.construct(64L * 32L);

    long testBlock1 = 0xf0000000ffffffffL; // rank 36
    long testBlock2 = 0x0101010101010101L; // rank 8
    long testBlock3 = 0xf0f0f0f0f0f0f0f0L; // rank 32
    long testBlock4 = 0xf0f0f0f0f0f0f0f0L; // rank 32

    for (int i = 0; i < 32; i += 4) {
      origin.setBlock(i, testBlock1);
      origin.setBlock(i + 1, testBlock2);
      origin.setBlock(i + 2, testBlock3);
      origin.setBlock(i + 3, testBlock4);
    }

    bv = new GMMNSequencial();
    bv.build(origin, conf);
  }
  @Test
  public void testSelect() {
    // first block
    assertEquals(bv.select(1L), 0L);
    assertEquals(bv.select(2L), 1L);
    assertEquals(bv.select(32L), 31L);
    assertEquals(bv.select(33L), 60L);
    // second block
    assertEquals(bv.select(37L), 64L);
    assertEquals(bv.select(44L), 120L);
    // third block
    assertEquals(bv.select(45L), 132L);
    assertEquals(bv.select(76L), 191L);
    // fourth block
    assertEquals(bv.select(77L), 196L);
    assertEquals(bv.select(108L), 255L);

    // second super block
    assertEquals(bv.select(109L), 256L);
    // second super block, second block
    assertEquals(bv.select(150L), 360L);
    // second super block, third block
    assertEquals(bv.select(153L), 388L);

    // third super block
    assertEquals(bv.select(217L), 512L);
    // third super block, fourth block
    assertEquals(bv.select(293L), 708L);

    // fourth super block
    assertEquals(bv.select(325L), 768L);
    // fourth super block, third block
    assertEquals(bv.select(400L), 959L);
    // last
    assertEquals(bv.select(432L), 1023L);
  }