/**
   * Compares the sum of all travel times with the sum of all travel times generated by the
   * C++DEQSim. As {@link #compareToDEQSimEvents(String)} does not function for most comparisons of
   * the JavaDEQSim and C++DEQSim model, we need to compare the time each car was on the road and
   * take its average. This figure should with in a small interval for both simulations. Attention:
   * Still when vehicles are stuck, this comparison can be off by larger number, because unstucking
   * the vehicles is done in different ways by the two simulations
   */
  protected void compareToDEQSimTravelTimes(
      final String deqsimEventsFile, final double tolerancePercentValue) {
    ArrayList<EventLog> deqSimLog = CppEventFileParser.parseFile(deqsimEventsFile);

    double deqSimTravelSum = EventLog.getSumTravelTime(deqSimLog);
    double javaSimTravelSum = EventLibrary.getSumTravelTime(allEvents);
    assertTrue(
        (Math.abs(deqSimTravelSum - javaSimTravelSum) / deqSimTravelSum) < tolerancePercentValue);
  }
  /**
   * Compare events to deq event file. The order of events must also be the same. (this test will
   * only succeed for simple tests with one car often!!!) => reason: at junctions the order of cars
   * can change + stuck vehicles are dealt with in different ways
   */
  protected void compareToDEQSimEvents(final String deqsimEventsFile) {
    LinkedList<Event> copyEventList = new LinkedList<Event>();

    // remove ActStartEvent and ActEndEvent, because this does not exist in
    // c++ DEQSim
    for (int i = 0; i < allEvents.size(); i++) {
      if (!(allEvents.get(i) instanceof ActivityStartEvent
          || allEvents.get(i) instanceof ActivityEndEvent)) {
        copyEventList.add(allEvents.get(i));
      }
    }

    ArrayList<EventLog> deqSimLog = CppEventFileParser.parseFile(deqsimEventsFile);
    for (int i = 0; i < copyEventList.size(); i++) {
      assertTrue(
          "events not equal.", CppEventFileParser.equals(copyEventList.get(i), deqSimLog.get(i)));
    }
  }