Program: 9936
Project: 9936
Buggy source:
/** 
 * In this function it is calculated whether the algorithm should stop. This is not always depends whether an actual solution was found The algorithm stops if: 1. the object attribute stop is set to true (possibly by an outside source) 2. the maximimum execution time is reached 3. the maximum number of class description tests is reached Continuation criteria and result improvement The algorithm continues (although it would normally stop) if 1. Minimum execution time is not reached (default 0) 2. not enough good solutions are found (default 1) otherwise it stops
 * @return true if the algorithm should stop, this is mostly indepent of the question if a solution was found
 */
private boolean isTerminationCriteriaReached(){
  if (this.stop) {
    return true;
  }
  System.out.println("String_Node_Str");
  long totalTimeNeeded=System.currentTimeMillis() - this.runtime;
  long maxMilliSeconds=maxExecutionTimeInSeconds * 1000;
  long minMilliSeconds=minExecutionTimeInSeconds * 1000;
  int conceptTests=conceptTestsReasoner + conceptTestsTooWeakList + conceptTestsOverlyGeneralList;
  boolean result=false;
  if (maxExecutionTimeInSeconds == 0)   result=false;
 else   if (maxExecutionTimeAlreadyReached)   return true;
 else   if (maxMilliSeconds < totalTimeNeeded) {
    this.stop();
    logger.info("String_Node_Str" + maxExecutionTimeInSeconds + "String_Node_Str");
    maxExecutionTimeAlreadyReached=true;
    return true;
  }
  if (maxClassDescriptionTests == 0)   result=false;
 else   if (conceptTests >= maxClassDescriptionTests) {
    logger.info("String_Node_Str" + maxClassDescriptionTests + "String_Node_Str"+ conceptTests+ "String_Node_Str");
    return true;
  }
  if (guaranteeXgoodAlreadyReached) {
    result=true;
  }
 else   if (solutions.size() >= guaranteeXgoodDescriptions) {
    if (guaranteeXgoodDescriptions != 1) {
      logger.info("String_Node_Str" + guaranteeXgoodDescriptions + "String_Node_Str");
    }
    guaranteeXgoodAlreadyReached=true;
    result=true;
  }
  if (minExecutionTimeAlreadyReached) {
    result=result && true;
  }
 else   if (minMilliSeconds < totalTimeNeeded) {
    if (minExecutionTimeInSeconds != 0) {
      logger.info("String_Node_Str" + minExecutionTimeInSeconds + "String_Node_Str");
    }
    minExecutionTimeAlreadyReached=true;
    result=result && true;
  }
 else {
    result=false;
  }
  return result;
}

Fixed version (ground truth):
/** 
 * In this function it is calculated whether the algorithm should stop. This is not always depends whether an actual solution was found The algorithm stops if: 1. the object attribute stop is set to true (possibly by an outside source) 2. the maximimum execution time is reached 3. the maximum number of class description tests is reached Continuation criteria and result improvement The algorithm continues (although it would normally stop) if 1. Minimum execution time is not reached (default 0) 2. not enough good solutions are found (default 1) otherwise it stops
 * @return true if the algorithm should stop, this is mostly indepent of the question if a solution was found
 */
private boolean isTerminationCriteriaReached(){
  if (this.stop) {
    return true;
  }
  long totalTimeNeeded=System.currentTimeMillis() - this.runtime;
  long maxMilliSeconds=maxExecutionTimeInSeconds * 1000;
  long minMilliSeconds=minExecutionTimeInSeconds * 1000;
  int conceptTests=conceptTestsReasoner + conceptTestsTooWeakList + conceptTestsOverlyGeneralList;
  boolean result=false;
  if (maxExecutionTimeInSeconds == 0)   result=false;
 else   if (maxExecutionTimeAlreadyReached)   return true;
 else   if (maxMilliSeconds < totalTimeNeeded) {
    this.stop();
    logger.info("String_Node_Str" + maxExecutionTimeInSeconds + "String_Node_Str");
    maxExecutionTimeAlreadyReached=true;
    return true;
  }
  if (maxClassDescriptionTests == 0)   result=false;
 else   if (conceptTests >= maxClassDescriptionTests) {
    logger.info("String_Node_Str" + maxClassDescriptionTests + "String_Node_Str"+ conceptTests+ "String_Node_Str");
    return true;
  }
  if (guaranteeXgoodAlreadyReached) {
    result=true;
  }
 else   if (solutions.size() >= guaranteeXgoodDescriptions) {
    if (guaranteeXgoodDescriptions != 1) {
      logger.info("String_Node_Str" + guaranteeXgoodDescriptions + "String_Node_Str");
    }
    guaranteeXgoodAlreadyReached=true;
    result=true;
  }
  if (minExecutionTimeAlreadyReached) {
    result=result && true;
  }
 else   if (minMilliSeconds < totalTimeNeeded) {
    if (minExecutionTimeInSeconds != 0) {
      logger.info("String_Node_Str" + minExecutionTimeInSeconds + "String_Node_Str");
    }
    minExecutionTimeAlreadyReached=true;
    result=result && true;
  }
 else {
    result=false;
  }
  return result;
}