@Test
  public void testCalculated() {

    Iterator<Row<Sample>> testData =
        new SampleRowsBuilder(new Resource("localhost"), MetricType.COUNTER)
            .row(900000000)
            .element("m0", 3000)
            .element("m1", 3000) // Thu Jul  9 11:00:00 CDT 1998
            .row(900000300)
            .element("m0", 6000)
            .element("m1", 6000)
            .row(900000600)
            .element("m0", 9000)
            .element("m1", 9000)
            .row(900000900)
            .element("m0", 12000)
            .element("m1", 12000)
            .row(900001200)
            .element("m0", 15000)
            .element("m1", 15000)
            .row(900001500)
            .element("m0", 18000)
            .element("m1", 18000)
            .row(900001800)
            .element("m0", 21000)
            .element("m1", 21000)
            .row(900002100)
            .element("m0", 24000)
            .element("m1", 24000)
            .row(900002400)
            .element("m0", 27000)
            .element("m1", 27000)
            .row(900002700)
            .element("m0", 30000)
            .element("m1", 30000)
            .row(900003000)
            .element("m0", 33000)
            .element("m1", 33000)
            .row(900003300)
            .element("m0", 36000)
            .element("m1", 36000)
            .row(900003600)
            .element("m0", 39000)
            .element("m1", 39000)
            .row(900003900)
            .element("m0", 42000)
            .element("m1", 42000)
            .row(900004200)
            .element("m0", 45000)
            .element("m1", 45000)
            .row(900004500)
            .element("m0", 48000)
            .element("m1", 48000)
            .row(900004800)
            .element("m0", 51000)
            .element("m1", 51000)
            .row(900005100)
            .element("m0", 54000)
            .element("m1", 54000)
            .row(900005400)
            .element("m0", 57000)
            .element("m1", 57000)
            .row(900005700)
            .element("m0", 60000)
            .element("m1", 60000)
            .row(900006000)
            .element("m0", 63000)
            .element("m1", 63000)
            .row(900006300)
            .element("m0", 66000)
            .element("m1", 66000)
            .row(900006600)
            .element("m0", 69000)
            .element("m1", 69000)
            .row(900006900)
            .element("m0", 72000)
            .element("m1", 72000)
            .row(900007200)
            .element("m0", 75000)
            .element("m1", 75000) // Thu Jul  9 13:00:00 CDT 1998
            .build();

    // Function to add two values
    BinaryFunction sum =
        new BinaryFunction() {
          private static final long serialVersionUID = 0L;

          @Override
          public double apply(double a, double b) {
            return a + b;
          }
        };

    ResultDescriptor rDescriptor =
        new ResultDescriptor(Duration.seconds(300))
            .datasource("m0", AVERAGE)
            .datasource("m1", AVERAGE)
            .calculate("total", sum, "m0", "m1")
            .export("total");

    Iterator<Row<Measurement>> expected =
        new MeasurementRowsBuilder(new Resource("localhost"))
            .row(900003600)
            .element("total", 20)
            .row(900007200)
            .element("total", 20)
            .build();

    ResultProcessor processor =
        new ResultProcessor(
            new Resource("localhost"),
            Timestamp.fromEpochSeconds(900003600),
            Timestamp.fromEpochSeconds(900007200),
            rDescriptor,
            Duration.minutes(60));

    assertRowsEqual(expected, processor.process(testData).iterator());
  }
  @Test
  public void test() {

    Iterator<Row<Sample>> testData =
        new SampleRowsBuilder(new Resource("localhost"), MetricType.GAUGE)
            .row(900000000)
            .element("m0", 1) // Thu Jul  9 11:00:00 CDT 1998
            .row(900000300)
            .element("m0", 1)
            .row(900000600)
            .element("m0", 1)
            .row(900000900)
            .element("m0", 1)
            .row(900001200)
            .element("m0", 1)
            .row(900001500)
            .element("m0", 1)
            .row(900001800)
            .element("m0", 1)
            .row(900002100)
            .element("m0", 3)
            .row(900002400)
            .element("m0", 3)
            .row(900002700)
            .element("m0", 3)
            .row(900003000)
            .element("m0", 3)
            .row(900003300)
            .element("m0", 3)
            .row(900003600)
            .element("m0", 3)
            .row(900003900)
            .element("m0", 1)
            .row(900004200)
            .element("m0", 1)
            .row(900004500)
            .element("m0", 1)
            .row(900004800)
            .element("m0", 1)
            .row(900005100)
            .element("m0", 1)
            .row(900005400)
            .element("m0", 1)
            .row(900005700)
            .element("m0", 3)
            .row(900006000)
            .element("m0", 3)
            .row(900006300)
            .element("m0", 3)
            .row(900006600)
            .element("m0", 3)
            .row(900006900)
            .element("m0", 3)
            .row(900007200)
            .element("m0", 3) // Thu Jul  9 13:00:00 CDT 1998
            .build();

    ResultDescriptor rDescriptor =
        new ResultDescriptor(Duration.seconds(300))
            .datasource("m0-avg", "m0", Duration.seconds(600), AVERAGE)
            .export("m0-avg");

    Iterator<Row<Measurement>> expected =
        new MeasurementRowsBuilder(new Resource("localhost"))
            .row(900003600)
            .element("m0-avg", 2.0)
            .row(900007200)
            .element("m0-avg", 2.0)
            .build();

    ResultProcessor processor =
        new ResultProcessor(
            new Resource("localhost"),
            Timestamp.fromEpochSeconds(900003600),
            Timestamp.fromEpochSeconds(900007200),
            rDescriptor,
            Duration.minutes(60));

    assertRowsEqual(expected, processor.process(testData).iterator());
  }