@Test
  public void testRowNumberArbitrary() throws Exception {
    List<Page> input =
        rowPagesBuilder(SINGLE_LONG)
            .row(1)
            .row(3)
            .row(5)
            .row(7)
            .pageBreak()
            .row(2)
            .row(4)
            .row(6)
            .row(8)
            .build();

    InMemoryWindowOperatorFactory operatorFactory =
        new InMemoryWindowOperatorFactory(
            0, ImmutableList.of(SINGLE_LONG), 0, ints(0), ROW_NUMBER, ints(), ints(), bools(), 10);
    Operator operator = operatorFactory.createOperator(driverContext);

    MaterializedResult expected =
        resultBuilder(FIXED_INT_64, FIXED_INT_64)
            .row(1, 1)
            .row(3, 2)
            .row(5, 3)
            .row(7, 4)
            .row(2, 5)
            .row(4, 6)
            .row(6, 7)
            .row(8, 8)
            .build();

    assertOperatorEquals(operator, input, expected);
  }
  @Test(
      expectedExceptions = IllegalStateException.class,
      expectedExceptionsMessageRegExp = "Task exceeded max memory size of 10B")
  public void testMemoryLimit() throws Exception {
    List<Page> input =
        rowPagesBuilder(SINGLE_LONG, SINGLE_DOUBLE)
            .row(1, 0.1)
            .row(2, 0.2)
            .pageBreak()
            .row(-1, -0.1)
            .row(4, 0.4)
            .build();

    Session session = new Session("user", "source", "catalog", "schema", "address", "agent");
    DriverContext driverContext =
        new TaskContext(
                new TaskId("query", "stage", "task"),
                executor,
                session,
                new DataSize(10, Unit.BYTE))
            .addPipelineContext(true, true)
            .addDriverContext();

    InMemoryWindowOperatorFactory operatorFactory =
        new InMemoryWindowOperatorFactory(
            0,
            ImmutableList.of(SINGLE_LONG, SINGLE_DOUBLE),
            0,
            ints(1),
            ROW_NUMBER,
            ints(),
            ints(0),
            bools(true),
            10);

    Operator operator = operatorFactory.createOperator(driverContext);

    toPages(operator, input);
  }
  @Test
  public void testRowNumberPartition() throws Exception {
    TupleInfo sourceTupleInfo = new TupleInfo(VARIABLE_BINARY, FIXED_INT_64, DOUBLE, BOOLEAN);

    List<Page> input =
        rowPagesBuilder(sourceTupleInfo)
            .row("b", -1, -0.1, true)
            .row("a", 2, 0.3, false)
            .row("a", 4, 0.2, true)
            .pageBreak()
            .row("b", 5, 0.4, false)
            .row("a", 6, 0.1, true)
            .build();

    InMemoryWindowOperatorFactory operatorFactory =
        new InMemoryWindowOperatorFactory(
            0,
            ImmutableList.of(sourceTupleInfo),
            0,
            ints(0),
            ROW_NUMBER,
            ints(0),
            ints(1),
            bools(true),
            10);

    Operator operator = operatorFactory.createOperator(driverContext);

    MaterializedResult expected =
        resultBuilder(VARIABLE_BINARY, FIXED_INT_64, DOUBLE, BOOLEAN, FIXED_INT_64)
            .row("a", 2, 0.3, false, 1)
            .row("a", 4, 0.2, true, 2)
            .row("a", 6, 0.1, true, 3)
            .row("b", -1, -0.1, true, 1)
            .row("b", 5, 0.4, false, 2)
            .build();

    assertOperatorEquals(operator, input, expected);
  }
  @Test
  public void testRowNumber() throws Exception {
    List<Page> input =
        rowPagesBuilder(SINGLE_LONG, SINGLE_DOUBLE)
            .row(2, 0.3)
            .row(4, 0.2)
            .row(6, 0.1)
            .pageBreak()
            .row(-1, -0.1)
            .row(5, 0.4)
            .build();

    InMemoryWindowOperatorFactory operatorFactory =
        new InMemoryWindowOperatorFactory(
            0,
            ImmutableList.of(SINGLE_LONG, SINGLE_DOUBLE),
            0,
            ints(1, 0),
            ROW_NUMBER,
            ints(),
            ints(0),
            bools(true),
            10);

    Operator operator = operatorFactory.createOperator(driverContext);

    MaterializedResult expected =
        resultBuilder(DOUBLE, FIXED_INT_64, FIXED_INT_64)
            .row(-0.1, -1, 1)
            .row(0.3, 2, 2)
            .row(0.2, 4, 3)
            .row(0.4, 5, 4)
            .row(0.1, 6, 5)
            .build();

    assertOperatorEquals(operator, input, expected);
  }