@Test
  public void ProcessSimulationData_Scenario1() {
    // Arrange
    SimulationPpProvider target =
        new SimulationPpProvider() {
          @Override
          public boolean IsRunning() {
            return true;
          }
        };
    target.SetSimulationData(DATA_SCENARIO1);
    FakePpListener ppListener = new FakePpListener();
    target.setPpListener(ppListener);
    target.enable();

    // Act
    target.ProcessSimulationData();

    // Assert
    assertTrue(ppListener.receivedValue.size() == 21);
    // check values
    assertTrue(ppListener.receivedValue.get(0).getEngValue().getFloatValue() == (float) 1.1);
    assertTrue(ppListener.receivedValue.get(1).getEngValue().getFloatValue() == (float) 1.2);
    assertTrue(ppListener.receivedValue.get(2).getEngValue().getFloatValue() == (float) 2.1);
    assertTrue(ppListener.receivedValue.get(3).getEngValue().getFloatValue() == (float) 3.5);
    assertTrue(ppListener.receivedValue.get(4).getEngValue().getFloatValue() == (float) 1.1);
    assertTrue(ppListener.receivedValue.get(5).getEngValue().getFloatValue() == (float) 1.2);
    assertTrue(ppListener.receivedValue.get(6).getEngValue().getFloatValue() == (float) 2.1);
    assertTrue(ppListener.receivedValue.get(7).getEngValue().getFloatValue() == (float) 3.5);
    // check generation time
    assertTrue(
        ppListener.receivedValue.get(0).getGenerationTime()
            == ppListener.receivedValue.get(1).getGenerationTime());
    assertTrue(
        ppListener.receivedValue.get(4).getGenerationTime()
            == ppListener.receivedValue.get(5).getGenerationTime());
    assertTrue(
        ppListener.receivedValue.get(2).getGenerationTime()
                - ppListener.receivedValue.get(1).getGenerationTime()
            == 2);
    assertTrue(
        ppListener.receivedValue.get(2).getGenerationTime()
                - ppListener.receivedValue.get(1).getGenerationTime()
            == 2);
    assertTrue(
        ppListener.receivedValue.get(18).getGenerationTime()
                - ppListener.receivedValue.get(1).getGenerationTime()
            == 30);
    assertTrue(
        ppListener.receivedValue.get(20).getGenerationTime()
                - ppListener.receivedValue.get(1).getGenerationTime()
            == 42);

    // check monitoring result
    assertEquals(MonitoringResult.WARNING, ppListener.receivedValue.get(20).getMonitoringResult());
    assertEquals(RangeCondition.HIGH, ppListener.receivedValue.get(20).getRangeCondition());
  }
  @Test
  public void ProcessSimulationData_Date() {

    // Arrange
    SimulationPpProvider target =
        new SimulationPpProvider() {
          @Override
          public boolean IsRunning() {
            return true;
          }
        };
    target.SetSimulationData(DATA_SCENARIO_DATE);
    FakePpListener ppListener = new FakePpListener();
    target.setPpListener(ppListener);
    target.enable();

    // Act
    long dateStart = TimeEncoding.getWallclockTime();
    target.ProcessSimulationData();
    long dateEnd = TimeEncoding.getWallclockTime();

    // Assert
    assertTrue(ppListener.receivedValue.size() == 2);
    assertTrue(
        ppListener.receivedValue.get(1).getGenerationTime()
            == ppListener.receivedValue.get(1).getAcquisitionTime() - 1500);

    long elapsedTimeGen0 = ppListener.receivedValue.get(0).getGenerationTime() - dateStart;
    long elapsedTimeAcqu0 = ppListener.receivedValue.get(0).getAcquisitionTime() - dateStart;

    assertTrue(0 <= elapsedTimeGen0 && elapsedTimeGen0 < 200);
    assertTrue(1300 < elapsedTimeAcqu0 && elapsedTimeAcqu0 < 1600);

    long elapsedTimeGen1 = ppListener.receivedValue.get(1).getGenerationTime() - dateStart;
    long elapsedTimeAcqu1 = ppListener.receivedValue.get(1).getAcquisitionTime() - dateStart;

    assertTrue(1900 < elapsedTimeGen1 && elapsedTimeGen1 < 2100);
    assertTrue(3400 < elapsedTimeAcqu1 && elapsedTimeAcqu1 < 3600);

    assertTrue((dateEnd - dateStart) >= elapsedTimeAcqu1);
  }
  @Test
  public void ProcessSimulationData_Scenario2() {

    // Arrange
    SimulationPpProvider target =
        new SimulationPpProvider() {
          @Override
          public boolean IsRunning() {
            return true;
          }
        };
    target.SetSimulationData(DATA_SCENARIO2);
    FakePpListener ppListener = new FakePpListener();
    target.setPpListener(ppListener);
    target.enable();

    // Act
    target.ProcessSimulationData();

    // Assert
    assertTrue(ppListener.receivedValue.size() == 52);
  }