Program: 144000
Project: 144000
Buggy source:
@Override public void addResult(String name,List<PredictedDataInstance<T,S>> predictions,Function<PredictedDataInstance<T,S>,Boolean> groundTruth){
  Collections.sort(predictions,Comparator.comparing(PredictedDataInstance::probability));
  List<CurvePoint> points=new ArrayList<>();
  double areaUnderCurve=0;
  for (int predictionIndex=0; predictionIndex < predictions.size(); predictionIndex++) {
    double relevantPrediction=groundTruth.apply(predictions.get(predictionIndex)) ? 1 : 0;
    if (!useAlternativeFormulation) {
      if (points.size() == 0) {
        points.add(new CurvePoint(predictionIndex + 1,relevantPrediction));
        continue;
      }
      points.add(new CurvePoint(predictionIndex + 1,points.get(points.size() - 1).getVerticalAxisValue() + relevantPrediction * Math.log(2) / Math.log(predictionIndex + 1)));
    }
 else {
      if (points.size() == 0) {
        points.add(new CurvePoint(predictionIndex + 1,(Math.pow(2,relevantPrediction) - 1) * Math.log(2) / Math.log(predictionIndex + 2)));
        continue;
      }
      points.add(new CurvePoint(predictionIndex + 1,points.get(points.size() - 1).getVerticalAxisValue() + (Math.pow(2,relevantPrediction) - 1) * Math.log(2) / Math.log(predictionIndex + 2)));
    }
    int k=points.size() - 1;
    areaUnderCurve+=0.5 * (points.get(k).getHorizontalAxisValue() - points.get(k - 1).getHorizontalAxisValue()) * (points.get(k).getVerticalAxisValue() + points.get(k - 1).getVerticalAxisValue());
  }
  areaUnderCurve+=0.5 * (1 - points.get(points.size() - 2).getHorizontalAxisValue()) * (1 + points.get(points.size() - 2).getVerticalAxisValue());
  curves.add(new Curve(name,points));
  areaUnderCurves.add(areaUnderCurve);
}

Fixed version (ground truth):
@Override public void addResult(String name,List<PredictedDataInstance<T,S>> predictions,Function<PredictedDataInstance<T,S>,Boolean> groundTruth){
  Collections.sort(predictions,Comparator.comparing(PredictedDataInstance::probability));
  List<CurvePoint> points=new ArrayList<>();
  double areaUnderCurve=0;
  for (int predictionIndex=0; predictionIndex < predictions.size(); predictionIndex++) {
    double relevantPrediction=groundTruth.apply(predictions.get(predictionIndex)) ? 1 : 0;
    if (!useAlternativeFormulation) {
      if (points.size() == 0) {
        points.add(new CurvePoint(predictionIndex + 1,relevantPrediction));
        continue;
      }
      points.add(new CurvePoint(predictionIndex + 1,points.get(points.size() - 1).getVerticalAxisValue() + relevantPrediction * Math.log(2) / Math.log(predictionIndex + 1)));
    }
 else {
      if (points.size() == 0) {
        points.add(new CurvePoint(predictionIndex + 1,(Math.pow(2,relevantPrediction) - 1) * Math.log(2) / Math.log(predictionIndex + 2)));
        continue;
      }
      points.add(new CurvePoint(predictionIndex + 1,points.get(points.size() - 1).getVerticalAxisValue() + (Math.pow(2,relevantPrediction) - 1) * Math.log(2) / Math.log(predictionIndex + 2)));
    }
    int k=points.size() - 1;
    areaUnderCurve+=0.5 * (points.get(k).getHorizontalAxisValue() - points.get(k - 1).getHorizontalAxisValue()) * (points.get(k).getVerticalAxisValue() + points.get(k - 1).getVerticalAxisValue());
  }
  curves.add(new Curve(name,points));
  areaUnderCurves.add(areaUnderCurve);
}