public OrDocIdIterator(BlockDocIdIterator[] docIdIterators) {
    _docIdIterators = docIdIterators;
    int numDocIdIterators = docIdIterators.length;
    _nextDocIds = new int[numDocIdIterators];
    Arrays.fill(_nextDocIds, -1);
    _numNotExhaustedIterators = numDocIdIterators;
  }
@Test
  public void testOrDocIdIterator() {
    // OR result: [0, 1, 2, 4, 5, 6, 8, 10, 13, 15, 16, 17, 18, 19, 20]
    int[] docIds1 = new int[]{1, 4, 6, 10, 15, 17, 18, 20};
    int[] docIds2 = new int[]{0, 1, 5, 8, 15, 18};
    int[] docIds3 = new int[]{1, 2, 6, 13, 16, 19};

    MutableRoaringBitmap bitmap1 = new MutableRoaringBitmap();
    bitmap1.add(docIds1);
    MutableRoaringBitmap bitmap2 = new MutableRoaringBitmap();
    bitmap2.add(docIds2);
    MutableRoaringBitmap bitmap3 = new MutableRoaringBitmap();
    bitmap3.add(docIds3);
    OrDocIdIterator andDocIdIterator = new OrDocIdIterator(new BlockDocIdIterator[]{
        new RangelessBitmapDocIdIterator(bitmap1), new RangelessBitmapDocIdIterator(bitmap2),
        new RangelessBitmapDocIdIterator(bitmap3)
    });

    assertEquals(andDocIdIterator.advance(1), 1);
    assertEquals(andDocIdIterator.next(), 2);
    assertEquals(andDocIdIterator.next(), 4);
    assertEquals(andDocIdIterator.advance(7), 8);
    assertEquals(andDocIdIterator.advance(13), 13);
    assertEquals(andDocIdIterator.next(), 15);
    assertEquals(andDocIdIterator.advance(18), 18);
    assertEquals(andDocIdIterator.next(), 19);
    assertEquals(andDocIdIterator.advance(21), Constants.EOF);
  }