public IntersectAllOperator(OpChainExecutionContext opChainExecutionContext,
      List<MultiStageOperator> inputOperators,
      DataSchema dataSchema) {
    super(opChainExecutionContext, inputOperators, dataSchema);
  }
@Test
  public void testIntersectAllOperator() {
    DataSchema schema = new DataSchema(new String[]{"int_col"},
        new DataSchema.ColumnDataType[]{DataSchema.ColumnDataType.INT});

    Mockito.when(_leftOperator.nextBlock())
        .thenReturn(OperatorTestUtil.block(schema, new Object[]{1}, new Object[]{2}, new Object[]{3}))
        .thenReturn(TransferableBlockTestUtils.getEndOfStreamTransferableBlock(0));
    Mockito.when(_rightOperator.nextBlock()).thenReturn(
            OperatorTestUtil.block(schema, new Object[]{1}, new Object[]{2}, new Object[]{4}))
        .thenReturn(TransferableBlockTestUtils.getEndOfStreamTransferableBlock(0));

    IntersectAllOperator intersectOperator =
        new IntersectAllOperator(OperatorTestUtil.getTracingContext(), ImmutableList.of(_leftOperator, _rightOperator),
            schema);

    TransferableBlock result = intersectOperator.nextBlock();
    while (result.getType() != DataBlock.Type.ROW) {
      result = intersectOperator.nextBlock();
    }
    List<Object[]> resultRows = result.getContainer();
    List<Object[]> expectedRows = Arrays.asList(new Object[]{1}, new Object[]{2});
    Assert.assertEquals(resultRows.size(), expectedRows.size());
    for (int i = 0; i < resultRows.size(); i++) {
      Assert.assertEquals(resultRows.get(i), expectedRows.get(i));
    }
  }