Program: 39871
Project: 39871
Buggy source:
@Override public Graph transform(Graph g){
  System.err.println("String_Node_Str");
  initIDSpace(g);
  Node tempNode=null;
  Node currentNode=null;
  Node lastNode=null;
  Node randDst1, randDst2;
  Edge tempEdge;
  String tempEdgeString;
  removalList=new HashMap<String,Edge>();
  HashMap<String,Edge> pairEdges=null;
  removedNodes=new TreeSet<Node>(new NodeComparator());
  waveCenterNodes=new TreeSet<Node>(new NodeComparator());
  waveFrontNodes=new TreeSet<Node>(new NodeComparator());
  additionalEdges=new HashMap[g.getNodes().length];
  for (int i=0; i < g.getNodes().length; i++) {
    additionalEdges[i]=new HashMap<String,Edge>();
  }
  nodeList=Arrays.asList(g.getNodes().clone());
  Collections.sort(nodeList,new NodeDegreeComparator());
  for (int counter=1; counter < (nodeList.size() - 3); counter++) {
    currentNode=getNode(lastNode);
    pairEdges=getPairEdges(g,currentNode);
    for (    Edge singleEdge : pairEdges.values()) {
      removalList.put(getEdgeString(singleEdge),singleEdge);
    }
    int currentNodeDegree=getEdges(g,currentNode).size();
    int triangulationEdgesCount=(currentNodeDegree - 1) - pairEdges.size();
    int[] outgoingEdges=currentNode.getOutgoingEdges();
    int loopCounter=0;
    while (triangulationEdgesCount > 0) {
      if (currentNodeDegree == 2) {
        randDst1=g.getNode(outgoingEdges[0]);
        randDst2=g.getNode(outgoingEdges[1]);
      }
 else {
        randDst1=g.getNode(outgoingEdges[rand.nextInt(outgoingEdges.length)]);
        randDst2=g.getNode(outgoingEdges[rand.nextInt(outgoingEdges.length)]);
      }
      if (!randDst1.isConnectedTo(randDst2)) {
        tempEdge=new Edge(Math.min(randDst1.getIndex(),randDst2.getIndex()),Math.max(randDst1.getIndex(),randDst2.getIndex()));
        tempEdgeString=getEdgeString(tempEdge);
        if (randDst1.getIndex() != randDst2.getIndex() && !additionalEdges[randDst1.getIndex()].containsKey(tempEdgeString)) {
          additionalEdges[randDst1.getIndex()].put(tempEdgeString,tempEdge);
          additionalEdges[randDst2.getIndex()].put(tempEdgeString,tempEdge);
          triangulationEdgesCount--;
          loopCounter=0;
        }
 else {
        }
      }
      if (loopCounter++ > 10)       throw new RuntimeException("String_Node_Str");
    }
    for (    Edge i : getEdges(g,currentNode).values()) {
      int otherEnd;
      if (i.getDst() == currentNode.getIndex()) {
        otherEnd=i.getSrc();
      }
 else {
        otherEnd=i.getDst();
      }
      tempNode=g.getNode(otherEnd);
      if (removedNodes.contains(tempNode)) {
        continue;
      }
      waveFrontNodes.add(tempNode);
      waveCenterNodes.add(tempNode);
    }
    lastNode=currentNode;
    removedNodes.add(currentNode);
  }
  LinkedList<Node> longestPath=longestPath(g);
  if (longestPath == null)   throw new RuntimeException("String_Node_Str");
  for (  Node n : nodeList)   System.out.println(n + "String_Node_Str" + n.getDegree());
  writeIDSpace(g);
  return g;
}

Fixed version (ground truth):
@Override public Graph transform(Graph g){
  System.err.println("String_Node_Str");
  initIDSpace(g);
  this.g=g;
  Node tempNode=null;
  Node currentNode=null;
  Node lastNode=null;
  Node randDst1, randDst2;
  Edge tempEdge;
  String tempEdgeString;
  removalList=new HashMap<String,Edge>();
  HashMap<String,Edge> pairEdges=null;
  removedNodes=new TreeSet<Node>(new NodeComparator());
  waveCenterNodes=new TreeSet<Node>(new NodeComparator());
  waveFrontNodes=new TreeSet<Node>(new NodeComparator());
  additionalEdges=new HashMap[g.getNodes().length];
  for (int i=0; i < g.getNodes().length; i++) {
    additionalEdges[i]=new HashMap<String,Edge>();
  }
  nodeList=Arrays.asList(g.getNodes().clone());
  Collections.sort(nodeList,new NodeDegreeComparator());
  for (int counter=1; counter < (nodeList.size() - 3); counter++) {
    currentNode=getNode(lastNode);
    pairEdges=getPairEdges(currentNode);
    for (    Edge singleEdge : pairEdges.values()) {
      removalList.put(getEdgeString(singleEdge),singleEdge);
    }
    HashMap<String,Edge> currentNodeConnections=getEdges(currentNode);
    int currentNodeDegree=currentNodeConnections.size();
    int triangulationEdgesCount=(currentNodeDegree - 1) - pairEdges.size();
    int[] outgoingEdges=filterOutgoingEdges(currentNode,currentNodeConnections);
    int firstCounter=0;
    int secondCounter=1;
    while (triangulationEdgesCount > 0) {
      randDst1=g.getNode(outgoingEdges[firstCounter]);
      randDst2=g.getNode(outgoingEdges[secondCounter]);
      if (randDst1.equals(randDst2))       continue;
      if (removedNodes.contains(randDst1) || removedNodes.contains(randDst2)) {
        continue;
      }
      if (!connected(randDst1,randDst2)) {
        tempEdge=new Edge(Math.min(randDst1.getIndex(),randDst2.getIndex()),Math.max(randDst1.getIndex(),randDst2.getIndex()));
        tempEdgeString=getEdgeString(tempEdge);
        if (randDst1.getIndex() != randDst2.getIndex() && !additionalEdges[randDst1.getIndex()].containsKey(tempEdgeString)) {
          additionalEdges[randDst1.getIndex()].put(tempEdgeString,tempEdge);
          additionalEdges[randDst2.getIndex()].put(tempEdgeString,tempEdge);
          triangulationEdgesCount--;
        }
      }
 else {
      }
      secondCounter++;
      if (secondCounter == (currentNodeDegree - 1)) {
        firstCounter++;
        secondCounter=firstCounter + 1;
      }
      if (firstCounter == (currentNodeDegree - 1))       throw new RuntimeException("String_Node_Str" + currentNode.getIndex());
    }
    for (    Edge i : getEdges(currentNode).values()) {
      int otherEnd;
      if (i.getDst() == currentNode.getIndex()) {
        otherEnd=i.getSrc();
      }
 else {
        otherEnd=i.getDst();
      }
      tempNode=g.getNode(otherEnd);
      if (removedNodes.contains(tempNode)) {
        continue;
      }
      waveFrontNodes.add(tempNode);
      waveCenterNodes.add(tempNode);
    }
    lastNode=currentNode;
    removedNodes.add(currentNode);
  }
  LinkedList<Node> longestPath=longestPath();
  if (longestPath == null)   throw new RuntimeException("String_Node_Str");
  for (  Node n : nodeList)   System.out.println(n + "String_Node_Str" + n.getDegree());
  writeIDSpace(g);
  return g;
}