@Override
  public int compareGenerations(
      TestSuiteChromosome parent1,
      TestSuiteChromosome parent2,
      TestSuiteChromosome child1,
      TestSuiteChromosome child2) {
    logger.debug(
        "Comparing sizes: "
            + parent1.size()
            + ", "
            + parent1.size()
            + " vs "
            + child1.size()
            + ", "
            + child2.size());
    if (!parent1.hasExecutedFitness(ff) || parent1.isChanged()) ff.getFitness(parent1);
    if (!parent2.hasExecutedFitness(ff) || parent2.isChanged()) ff.getFitness(parent2);
    if (!child1.hasExecutedFitness(ff) || child1.isChanged()) ff.getFitness(child1);
    if (!child2.hasExecutedFitness(ff) || child2.isChanged()) ff.getFitness(child2);

    double minParents = Math.min(parent1.getFitness(ff), parent2.getFitness(ff));
    double minChildren = Math.min(child1.getFitness(ff), child2.getFitness(ff));
    if (minParents < minChildren) {
      return -1;
    }
    if (minParents > minChildren) {
      return 1;
    }
    return 0;
  }
  @Override
  public int compareChromosomes(TestSuiteChromosome chromosome1, TestSuiteChromosome chromosome2) {

    double fitness1 = ff.getFitness(chromosome1, false);
    double fitness2 = ff.getFitness(chromosome2, false);
    int i = (int) Math.signum(fitness1 - fitness2);
    //		if (!chromosome1.hasExecutedFitness(ff) || chromosome1.isChanged())
    //			ff.getFitness(chromosome1);
    //		if (!chromosome2.hasExecutedFitness(ff) || chromosome2.isChanged())
    //			ff.getFitness(chromosome2);
    ff.updateCoveredGoals();
    return i;
  }