Program: 112607
Project: 112607
Buggy source:
private Map<P,Tuple<P,List<E>>> msmt(final Set<P> sources,final Set<P> targets,Cost<E> cost,Cost<E> bound,Double max){
class Mark extends Quadruple<E,E,Double,Double> implements Comparable<Mark> {
    private static final long serialVersionUID=1L;
    /** 
 * Constructor of an entry.
 * @param one {@link AbstractEdge} defining the route mark.
 * @param two Predecessor {@link AbstractEdge}.
 * @param three Cost value to this route mark.
 * @param four Bounding cost value to this route mark.
 */
    public Mark(    E one,    E two,    Double three,    Double four){
      super(one,two,three,four);
    }
    @Override public int compareTo(    Mark other){
      return (this.three() < other.three()) ? -1 : (this.three() > other.three()) ? 1 : 0;
    }
  }
  Map<E,Set<P>> targetEdges=new HashMap<>();
  for (  P target : targets) {
    logger.trace("String_Node_Str",target,target.edge().id(),target.fraction());
    if (!targetEdges.containsKey(target)) {
      targetEdges.put(target.edge(),new HashSet<>(Arrays.asList(target)));
    }
 else {
      targetEdges.get(target.edge()).add(target);
    }
  }
  PriorityQueue<Mark> priorities=new PriorityQueue<>();
  Map<E,Mark> entries=new HashMap<>();
  Map<P,Mark> finishs=new HashMap<>();
  Map<Mark,P> reaches=new HashMap<>();
  Map<Mark,P> starts=new HashMap<>();
  for (  P source : sources) {
    double startcost=cost.cost(source.edge(),1 - source.fraction());
    double startbound=bound != null ? bound.cost(source.edge(),1 - source.fraction()) : 0.0;
    logger.trace("String_Node_Str",source,source.edge().id(),source.fraction(),startcost);
    if (targetEdges.containsKey(source.edge())) {
      for (      P target : targetEdges.get(source.edge())) {
        if (target.fraction() < source.fraction()) {
          continue;
        }
        double reachcost=startcost - cost.cost(source.edge(),1 - target.fraction());
        double reachbound=bound != null ? startcost - bound.cost(source.edge(),1 - target.fraction()) : 0.0;
        logger.trace("String_Node_Str",target,source.edge().id(),source.fraction(),target.fraction(),reachcost);
        Mark reach=new Mark(source.edge(),null,reachcost,reachbound);
        reaches.put(reach,target);
        starts.put(reach,source);
        priorities.add(reach);
      }
    }
    Mark start=entries.get(source.edge());
    if (start == null) {
      logger.trace("String_Node_Str",source,source.edge().id(),source.fraction(),startcost);
      start=new Mark(source.edge(),null,startcost,startbound);
      entries.put(source.edge(),start);
      starts.put(start,source);
      priorities.add(start);
    }
 else     if (startcost < start.three()) {
      logger.trace("String_Node_Str",source,source.edge().id(),source.fraction(),startcost);
      start=new Mark(source.edge(),null,startcost,startbound);
      entries.put(source.edge(),start);
      starts.put(start,source);
      priorities.remove(start);
      priorities.add(start);
    }
  }
  while (priorities.size() > 0) {
    Mark current=priorities.poll();
    if (targetEdges.isEmpty()) {
      logger.trace("String_Node_Str");
      break;
    }
    if (max != null && current.four() > max) {
      logger.trace("String_Node_Str");
      break;
    }
    if (reaches.containsKey(current)) {
      P target=reaches.get(current);
      if (finishs.containsKey(target)) {
        continue;
      }
 else {
        logger.trace("String_Node_Str",target,current.one(),target.fraction(),current.three());
        finishs.put(target,current);
        Set<P> edges=targetEdges.get(current.one());
        edges.remove(target);
        if (edges.isEmpty()) {
          targetEdges.remove(current.one());
        }
        continue;
      }
    }
    logger.trace("String_Node_Str",current.one().id(),current.three());
    Iterator<E> successors=current.one().successors();
    while (successors.hasNext()) {
      E successor=successors.next();
      double succcost=current.three() + cost.cost(successor);
      double succbound=bound != null ? current.four() + bound.cost(successor) : 0.0;
      if (targetEdges.containsKey(successor)) {
        for (        P target : targetEdges.get(successor)) {
          double reachcost=succcost - cost.cost(successor,1 - target.fraction());
          double reachbound=bound != null ? succbound - bound.cost(successor,1 - target.fraction()) : 0.0;
          logger.trace("String_Node_Str",target,successor.id(),target.fraction(),reachcost);
          Mark reach=new Mark(successor,current.one(),reachcost,reachbound);
          reaches.put(reach,target);
          priorities.add(reach);
        }
      }
      if (!entries.containsKey(successor)) {
        logger.trace("String_Node_Str",successor.id(),succcost);
        Mark mark=new Mark(successor,current.one(),succcost,succbound);
        entries.put(successor,mark);
        priorities.add(mark);
      }
    }
  }
  Map<P,Tuple<P,List<E>>> paths=new HashMap<>();
  for (  P target : targets) {
    if (!finishs.containsKey(target)) {
      paths.put(target,null);
    }
 else {
      LinkedList<E> path=new LinkedList<>();
      Mark iterator=finishs.get(target);
      Mark start=null;
      while (iterator != null) {
        path.addFirst(iterator.one());
        start=iterator;
        iterator=iterator.two() != null ? entries.get(iterator.two()) : null;
      }
      paths.put(target,new Tuple<P,List<E>>(starts.get(start),path));
    }
  }
  entries.clear();
  finishs.clear();
  reaches.clear();
  priorities.clear();
  return paths;
}

Fixed version (ground truth):
private Map<P,Tuple<P,List<E>>> msmt(final Set<P> sources,final Set<P> targets,Cost<E> cost,Cost<E> bound,Double max){
class Mark extends Quadruple<E,E,Double,Double> implements Comparable<Mark> {
    private static final long serialVersionUID=1L;
    /** 
 * Constructor of an entry.
 * @param one {@link AbstractEdge} defining the route mark.
 * @param two Predecessor {@link AbstractEdge}.
 * @param three Cost value to this route mark.
 * @param four Bounding cost value to this route mark.
 */
    public Mark(    E one,    E two,    Double three,    Double four){
      super(one,two,three,four);
    }
    @Override public int compareTo(    Mark other){
      return (this.three() < other.three()) ? -1 : (this.three() > other.three()) ? 1 : 0;
    }
  }
  Map<E,Set<P>> targetEdges=new HashMap<>();
  for (  P target : targets) {
    logger.trace("String_Node_Str",target,target.edge().id(),target.fraction());
    if (!targetEdges.containsKey(target.edge())) {
      targetEdges.put(target.edge(),new HashSet<>(Arrays.asList(target)));
    }
 else {
      targetEdges.get(target.edge()).add(target);
    }
  }
  PriorityQueue<Mark> priorities=new PriorityQueue<>();
  Map<E,Mark> entries=new HashMap<>();
  Map<P,Mark> finishs=new HashMap<>();
  Map<Mark,P> reaches=new HashMap<>();
  Map<Mark,P> starts=new HashMap<>();
  for (  P source : sources) {
    double startcost=cost.cost(source.edge(),1 - source.fraction());
    double startbound=bound != null ? bound.cost(source.edge(),1 - source.fraction()) : 0.0;
    logger.trace("String_Node_Str",source,source.edge().id(),source.fraction(),startcost);
    if (targetEdges.containsKey(source.edge())) {
      for (      P target : targetEdges.get(source.edge())) {
        if (target.fraction() < source.fraction()) {
          continue;
        }
        double reachcost=startcost - cost.cost(source.edge(),1 - target.fraction());
        double reachbound=bound != null ? startcost - bound.cost(source.edge(),1 - target.fraction()) : 0.0;
        logger.trace("String_Node_Str",target,source.edge().id(),source.fraction(),target.fraction(),reachcost);
        Mark reach=new Mark(source.edge(),null,reachcost,reachbound);
        reaches.put(reach,target);
        starts.put(reach,source);
        priorities.add(reach);
      }
    }
    Mark start=entries.get(source.edge());
    if (start == null) {
      logger.trace("String_Node_Str",source,source.edge().id(),source.fraction(),startcost);
      start=new Mark(source.edge(),null,startcost,startbound);
      entries.put(source.edge(),start);
      starts.put(start,source);
      priorities.add(start);
    }
 else     if (startcost < start.three()) {
      logger.trace("String_Node_Str",source,source.edge().id(),source.fraction(),startcost);
      start=new Mark(source.edge(),null,startcost,startbound);
      entries.put(source.edge(),start);
      starts.put(start,source);
      priorities.remove(start);
      priorities.add(start);
    }
  }
  while (priorities.size() > 0) {
    Mark current=priorities.poll();
    if (targetEdges.isEmpty()) {
      logger.trace("String_Node_Str");
      break;
    }
    if (max != null && current.four() > max) {
      logger.trace("String_Node_Str");
      break;
    }
    if (reaches.containsKey(current)) {
      P target=reaches.get(current);
      if (finishs.containsKey(target)) {
        continue;
      }
 else {
        logger.trace("String_Node_Str",target,current.one(),target.fraction(),current.three());
        finishs.put(target,current);
        Set<P> edges=targetEdges.get(current.one());
        edges.remove(target);
        if (edges.isEmpty()) {
          targetEdges.remove(current.one());
        }
        continue;
      }
    }
    logger.trace("String_Node_Str",current.one().id(),current.three());
    Iterator<E> successors=current.one().successors();
    while (successors.hasNext()) {
      E successor=successors.next();
      double succcost=current.three() + cost.cost(successor);
      double succbound=bound != null ? current.four() + bound.cost(successor) : 0.0;
      if (targetEdges.containsKey(successor)) {
        for (        P target : targetEdges.get(successor)) {
          double reachcost=succcost - cost.cost(successor,1 - target.fraction());
          double reachbound=bound != null ? succbound - bound.cost(successor,1 - target.fraction()) : 0.0;
          logger.trace("String_Node_Str",target,successor.id(),target.fraction(),reachcost);
          Mark reach=new Mark(successor,current.one(),reachcost,reachbound);
          reaches.put(reach,target);
          priorities.add(reach);
        }
      }
      if (!entries.containsKey(successor)) {
        logger.trace("String_Node_Str",successor.id(),succcost);
        Mark mark=new Mark(successor,current.one(),succcost,succbound);
        entries.put(successor,mark);
        priorities.add(mark);
      }
    }
  }
  Map<P,Tuple<P,List<E>>> paths=new HashMap<>();
  for (  P target : targets) {
    if (!finishs.containsKey(target)) {
      paths.put(target,null);
    }
 else {
      LinkedList<E> path=new LinkedList<>();
      Mark iterator=finishs.get(target);
      Mark start=null;
      while (iterator != null) {
        path.addFirst(iterator.one());
        start=iterator;
        iterator=iterator.two() != null ? entries.get(iterator.two()) : null;
      }
      paths.put(target,new Tuple<P,List<E>>(starts.get(start),path));
    }
  }
  entries.clear();
  finishs.clear();
  reaches.clear();
  priorities.clear();
  return paths;
}