protected static SingleBenchmarkResult createMerge(
      SolverBenchmarkResult solverBenchmarkResult,
      ProblemBenchmarkResult problemBenchmarkResult,
      SingleBenchmarkResult oldResult) {
    SingleBenchmarkResult newResult =
        new SingleBenchmarkResult(solverBenchmarkResult, problemBenchmarkResult);
    newResult.pureSingleStatisticList =
        new ArrayList<PureSingleStatistic>(oldResult.pureSingleStatisticList.size());
    for (PureSingleStatistic oldSingleStatistic : oldResult.pureSingleStatisticList) {
      newResult.pureSingleStatisticList.add(
          oldSingleStatistic.getStatisticType().buildPureSingleStatistic(newResult));
    }

    newResult.initSingleStatisticMap();
    for (SingleStatistic singleStatistic : newResult.effectiveSingleStatisticMap.values()) {
      singleStatistic.setPointList(
          oldResult.getSingleStatistic(singleStatistic.getStatisticType()).getPointList());
    }
    // Skip oldResult.reportDirectory
    // Skip oldResult.usedMemoryAfterInputSolution
    newResult.succeeded = oldResult.succeeded;
    newResult.score = oldResult.score;
    newResult.timeMillisSpent = oldResult.timeMillisSpent;
    newResult.calculateCount = oldResult.calculateCount;

    solverBenchmarkResult.getSingleBenchmarkResultList().add(newResult);
    problemBenchmarkResult.getSingleBenchmarkResultList().add(newResult);
    return newResult;
  }