removeBridge pass tests
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
index 4cb6b39..780b277 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
@@ -88,18 +88,57 @@
             posIterator = value.getFRList().iterator();
         return posIterator.next();
     }
+    
+    public PositionWritable getPrevDestVertexId(VertexValueWritable value) {
+        if(value.getRFList().getCountOfPosition() > 0) // #FFList() > 0
+            posIterator = value.getRFList().iterator();
+        else // #FRList() > 0
+            posIterator = value.getRRList().iterator();
+        return posIterator.next();
+    }
 
     /**
+     * check if prev/next destination exists
+     */
+    public boolean hasNextDest(VertexValueWritable value){
+        return value.getFFList().getCountOfPosition() > 0 || value.getFRList().getCountOfPosition() > 0;
+    }
+    
+    public boolean hasPrevDest(VertexValueWritable value){
+        return value.getRFList().getCountOfPosition() > 0 || value.getRRList().getCountOfPosition() > 0;
+    }
+    
+    /**
      * head send message to all next nodes
      */
     public void sendMsgToAllNextNodes(VertexValueWritable value) {
         posIterator = value.getFFList().iterator(); // FFList
         while(posIterator.hasNext()){
+            outgoingMsg.setMessage(AdjMessage.FROMFF);
             destVertexId.set(posIterator.next());
             sendMsg(destVertexId, outgoingMsg);
         }
         posIterator = value.getFRList().iterator(); // FRList
         while(posIterator.hasNext()){
+            outgoingMsg.setMessage(AdjMessage.FROMFR);
+            destVertexId.set(posIterator.next());
+            sendMsg(destVertexId, outgoingMsg);
+        }
+    }
+    
+    /**
+     * head send message to all next nodes
+     */
+    public void sendMsgToAllPrevNodes(VertexValueWritable value) {
+        posIterator = value.getRFList().iterator(); // FFList
+        while(posIterator.hasNext()){
+            outgoingMsg.setMessage(AdjMessage.FROMRF);
+            destVertexId.set(posIterator.next());
+            sendMsg(destVertexId, outgoingMsg);
+        }
+        posIterator = value.getRRList().iterator(); // FRList
+        while(posIterator.hasNext()){
+            outgoingMsg.setMessage(AdjMessage.FROMRR);
             destVertexId.set(posIterator.next());
             sendMsg(destVertexId, outgoingMsg);
         }
@@ -183,20 +222,42 @@
         if (getSuperstep() == 1) {
             if(VertexUtil.isHeadVertexWithIndegree(getVertexValue())
                     || VertexUtil.isHeadWithoutIndegree(getVertexValue())){
-                outgoingMsg.setMessage(AdjMessage.NON);
                 outgoingMsg.setSourceVertexId(getVertexId());
                 sendMsgToAllNextNodes(getVertexValue());
             }
+//            if(VertexUtil.isRearVertexWithOutdegree(getVertexValue())
+//                    || VertexUtil.isRearWithoutOutdegree(getVertexValue())){
+//                outgoingMsg.setSourceVertexId(getVertexId());
+//                sendMsgToAllPrevNodes(getVertexValue());
+//            }
         } else if (getSuperstep() == 2){
             while (msgIterator.hasNext()) {
                 incomingMsg = msgIterator.next();
                 if(VertexUtil.isPathVertex(getVertexValue())){
-                    outgoingMsg.setMessage(AdjMessage.NON);
-                    outgoingMsg.setStartVertexId(incomingMsg.getSourceVertexId());
-                    outgoingMsg.setSourceVertexId(getVertexId());
-                    outgoingMsg.setChainVertexId(getVertexValue().getKmer());
-                    destVertexId.set(getNextDestVertexId(getVertexValue()));
-                    sendMsg(destVertexId, outgoingMsg);
+                    switch(incomingMsg.getMessage()){
+                        case AdjMessage.FROMFF:
+                        case AdjMessage.FROMRF:
+                            if(hasNextDest(getVertexValue())){
+                                outgoingMsg.setMessage(AdjMessage.NON);
+                                outgoingMsg.setStartVertexId(incomingMsg.getSourceVertexId());
+                                outgoingMsg.setSourceVertexId(getVertexId());
+                                outgoingMsg.setChainVertexId(getVertexValue().getKmer());
+                                destVertexId.set(getNextDestVertexId(getVertexValue()));
+                                sendMsg(destVertexId, outgoingMsg);
+                            }
+                            break;
+                        case AdjMessage.FROMFR:
+                        case AdjMessage.FROMRR:
+                            if(hasPrevDest(getVertexValue())){
+                                outgoingMsg.setMessage(AdjMessage.NON);
+                                outgoingMsg.setStartVertexId(incomingMsg.getSourceVertexId());
+                                outgoingMsg.setSourceVertexId(getVertexId());
+                                outgoingMsg.setChainVertexId(getVertexValue().getKmer());
+                                destVertexId.set(getPrevDestVertexId(getVertexValue()));
+                                sendMsg(destVertexId, outgoingMsg);
+                            }
+                            break;
+                    }
                 }
             }
         } else if (getSuperstep() == 3){
@@ -273,7 +334,7 @@
                 }
             }
         } else if (getSuperstep() == 4){
-            while (msgIterator.hasNext()) {
+            if(msgIterator.hasNext()) {
                 incomingMsg = msgIterator.next();
                 if(incomingMsg.getMessage() == AdjMessage.KILL){
                     broadcaseKillself();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
index edadc50..c312f81 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
@@ -60,6 +60,17 @@
     }
     
     /**
+     * check if prev/next destination exists
+     */
+    public boolean hasNextDest(VertexValueWritable value){
+        return value.getFFList().getCountOfPosition() > 0 || value.getFRList().getCountOfPosition() > 0;
+    }
+    
+    public boolean hasPrevDest(VertexValueWritable value){
+        return value.getRFList().getCountOfPosition() > 0 || value.getRRList().getCountOfPosition() > 0;
+    }
+    
+    /**
      * get destination vertex
      */
     public PositionWritable getNextDestVertexId(VertexValueWritable value) {
@@ -70,9 +81,8 @@
             posIterator = value.getFRList().iterator();
             return posIterator.next();
         } else {
-          return null;  
+            return null;  
         }
-        
     }
 
     public PositionWritable getPreDestVertexId(VertexValueWritable value) {
@@ -222,22 +232,22 @@
      */
     public void startSendMsg() {
         if (VertexUtil.isHeadVertexWithIndegree(getVertexValue())) {
-            outgoingMsg.setFlag((byte)(MessageFlag.IS_HEAD | MessageFlag.HEAD_SHOULD_MERGEWITHNEXT));
+            outgoingMsg.setFlag((byte)(MessageFlag.IS_HEAD));//| MessageFlag.HEAD_SHOULD_MERGEWITHNEXT
             sendMsgToAllNextNodes(getVertexValue());
             voteToHalt();
         }
         if (VertexUtil.isRearVertexWithOutdegree(getVertexValue())) {
-            outgoingMsg.setFlag((byte)(MessageFlag.IS_HEAD | MessageFlag.HEAD_SHOULD_MERGEWITHPREV));
+            outgoingMsg.setFlag((byte)(MessageFlag.IS_HEAD));//| MessageFlag.HEAD_SHOULD_MERGEWITHPREV
             sendMsgToAllPreviousNodes(getVertexValue());
             voteToHalt();
         }
         if (VertexUtil.isHeadWithoutIndegree(getVertexValue())){
-            outgoingMsg.setFlag((byte)(MessageFlag.IS_HEAD | MessageFlag.HEAD_SHOULD_MERGEWITHNEXT));
+            outgoingMsg.setFlag((byte)(MessageFlag.IS_HEAD));//| MessageFlag.HEAD_SHOULD_MERGEWITHNEXT
             sendMsg(getVertexId(), outgoingMsg); //send to itself
             voteToHalt();
         }
         if (VertexUtil.isRearWithoutOutdegree(getVertexValue())){
-            outgoingMsg.setFlag((byte)(MessageFlag.IS_HEAD | MessageFlag.HEAD_SHOULD_MERGEWITHPREV));
+            outgoingMsg.setFlag((byte)(MessageFlag.IS_HEAD));//| MessageFlag.HEAD_SHOULD_MERGEWITHPREV
             sendMsg(getVertexId(), outgoingMsg); //send to itself
             voteToHalt();
         }
@@ -421,20 +431,20 @@
         getVertexValue().setState(state);
     }
     
-    public byte isHeadShouldMergeWithPrev(){
-    	return (byte) (getVertexValue().getState() & State.HEAD_SHOULD_MERGEWITHPREV);
-    }
+//    public byte isHeadShouldMergeWithPrev(){
+//    	return (byte) (getVertexValue().getState() & State.HEAD_SHOULD_MERGEWITHPREV);
+//    }
     /**
      * This vertex tries to merge with next vertex and send update msg to neighber
      * @throws IOException 
      */
     public void sendUpdateMsgToPredecessor(){
     	setStateAsMergeWithNext();
-    	if(isHeadShouldMergeWithPrev() == 0){
-		    if(getVertexValue().getFFList().getLength() > 0)
-		        getVertexValue().setMergeDest(getVertexValue().getFFList().getPosition(0));
-		    else
-		        getVertexValue().setMergeDest(getVertexValue().getFRList().getPosition(0));
+    	if(hasNextDest(getVertexValue())){
+//		    if(getVertexValue().getFFList().getLength() > 0)
+//		        getVertexValue().setMergeDest(getVertexValue().getFFList().getPosition(0));
+//		    else
+//		        getVertexValue().setMergeDest(getVertexValue().getFRList().getPosition(0));
 		    broadcastUpdateMsg();
     	}
     }
@@ -445,20 +455,20 @@
         getVertexValue().setState(state);
     }
     
-    public byte isHeadShouldMergeWithNext(){
-    	return (byte) (getVertexValue().getState() & State.HEAD_SHOULD_MERGEWITHNEXT);
-    }
+//    public byte isHeadShouldMergeWithNext(){
+//    	return (byte) (getVertexValue().getState() & State.HEAD_SHOULD_MERGEWITHNEXT);
+//    }
     /**
      * This vertex tries to merge with next vertex and send update msg to neighber
      * @throws IOException 
      */
     public void sendUpdateMsgToSuccessor(){
     	setStateAsMergeWithPrev();
-    	if(isHeadShouldMergeWithNext() == 0){
-		    if(getVertexValue().getRFList().getLength() > 0)
-		        getVertexValue().setMergeDest(getVertexValue().getRFList().getPosition(0));
-		    else
-		        getVertexValue().setMergeDest(getVertexValue().getRRList().getPosition(0));
+    	if(hasNextDest(getVertexValue())){
+//		    if(getVertexValue().getRFList().getLength() > 0)
+//		        getVertexValue().setMergeDest(getVertexValue().getRFList().getPosition(0));
+//		    else
+//		        getVertexValue().setMergeDest(getVertexValue().getRRList().getPosition(0));
 		    broadcastUpdateMsg();
     	}
     }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
index c66830c..bf53f75 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
@@ -13,6 +13,7 @@
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 
 /*
  * vertexId: BytesWritable
@@ -122,9 +123,6 @@
      */
      
     protected boolean setPrevInfo(VertexValueWritable value) {
-        if(headFlag > 0 && (getVertexValue().getState() & State.HEAD_SHOULD_MERGEWITHNEXT) > 0){
-            return false;
-        }
         if (value.getRRList().getCountOfPosition() > 0) {
             prevID.set(value.getRRList().getPosition(0));
             prevHead = isNodeRandomHead(prevID);
@@ -146,7 +144,6 @@
         else if (getSuperstep() == 2)
             initState(msgIterator);
         else if (getSuperstep() % 4 == 3){
-
             //tailFlag = (byte) (MessageFlag.IS_TAIL & getVertexValue().getState());
             //outFlag = (byte) (headFlag | tailFlag);
             outFlag |= headFlag;
@@ -166,15 +163,16 @@
             hasPrev = setPrevInfo(getVertexValue());//&& headFlag == 0;
             if (hasNext || hasPrev) {
                 if (curHead) {
-                    if (hasNext && !nextHead && (getNextDestVertexId(getVertexValue()) != null)) {
+                    if (hasNext && !nextHead) {
                         // compress this head to the forward tail
                 		sendUpdateMsgToPredecessor(); //TODO up -> update  From -> to
-                    } else if (hasPrev && !prevHead && (getPreDestVertexId(getVertexValue()) != null)) {
+                    } else if (hasPrev && !prevHead) {
                         // compress this head to the reverse tail
                         sendUpdateMsgToSuccessor();
                     } //else
                         //voteToHalt();
-                } else {
+                }
+            }else {
                     // I'm a tail
                     if (hasNext && hasPrev) {
                          if ((!nextHead && !prevHead) && (curID.compareTo(nextID) < 0 && curID.compareTo(prevID) < 0)) {
@@ -200,14 +198,14 @@
                     } //else
                         //voteToHalt();
                 }
-            }
         }
         else if (getSuperstep() % 4 == 0){
             //update neighber
             while (msgIterator.hasNext()) {
                 incomingMsg = msgIterator.next();
                 processUpdate();
-                //voteToHalt();
+                if(VertexUtil.isHeadOrRearVertexWithDegree(getVertexValue()))
+                    voteToHalt();
             }
         } else if (getSuperstep() % 4 == 1){
             //send message to the merge object and kill self
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
index e9197db..c7c96f3 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
@@ -22,6 +22,9 @@
         return value.outDegree() > 0 && !isPathVertex(value);
     }
     
+    public static boolean isHeadOrRearVertexWithDegree(VertexValueWritable value){
+        return isHeadVertexWithIndegree(value) || isRearVertexWithOutdegree(value);
+    }
     /**
      * Head Vertex: out-degree > 0, and has indegress
      * 
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
index 2c85e42..eae94cb 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
@@ -83,12 +83,12 @@
     private static void generateP4ForMergeGraphJob(String jobName, String outputPath) throws IOException {
         PregelixJob job = new PregelixJob(jobName);
         job.setVertexClass(P4ForPathMergeVertex.class);
-        job.setVertexInputFormatClass(NaiveAlgorithmForPathMergeInputFormat.class); //DataCleanInputFormat
+        job.setVertexInputFormatClass(DataCleanInputFormat.class); //NaiveAlgorithmForPathMergeInputFormat //
         job.setVertexOutputFormatClass(DataCleanOutputFormat.class);
         job.setDynamicVertexValueSize(true);
         job.setOutputKeyClass(PositionWritable.class);
         job.setOutputValueClass(VertexValueWritable.class);
-        job.getConfiguration().setInt(P4ForPathMergeVertex.KMER_SIZE, 3);
+        job.getConfiguration().setInt(P4ForPathMergeVertex.KMER_SIZE, 5);
         job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
     }
 
@@ -100,7 +100,7 @@
     private static void generateTipAddGraphJob(String jobName, String outputPath) throws IOException {
         PregelixJob job = new PregelixJob(jobName);
         job.setVertexClass(TipAddVertex.class);
-        job.setVertexInputFormatClass(NaiveAlgorithmForPathMergeInputFormat.class);
+        job.setVertexInputFormatClass(DataCleanOutputFormat.class);
         job.setVertexOutputFormatClass(DataCleanOutputFormat.class);
         job.setDynamicVertexValueSize(true);
         job.setOutputKeyClass(PositionWritable.class);
@@ -117,12 +117,12 @@
     private static void generateTipRemoveGraphJob(String jobName, String outputPath) throws IOException {
         PregelixJob job = new PregelixJob(jobName);
         job.setVertexClass(TipRemoveVertex.class);
-        job.setVertexInputFormatClass(DataCleanInputFormat.class);
+        job.setVertexInputFormatClass(NaiveAlgorithmForPathMergeInputFormat.class);
         job.setVertexOutputFormatClass(DataCleanOutputFormat.class);
         job.setDynamicVertexValueSize(true);
         job.setOutputKeyClass(PositionWritable.class);
         job.setOutputValueClass(VertexValueWritable.class);
-        job.getConfiguration().setInt(TipRemoveVertex.KMER_SIZE, 3);
+        job.getConfiguration().setInt(TipRemoveVertex.KMER_SIZE, 5);
         job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
     }
 
@@ -156,7 +156,7 @@
         job.setDynamicVertexValueSize(true);
         job.setOutputKeyClass(PositionWritable.class);
         job.setOutputValueClass(VertexValueWritable.class);
-        job.getConfiguration().setInt(TipRemoveVertex.KMER_SIZE, 3);
+        job.getConfiguration().setInt(TipRemoveVertex.KMER_SIZE, 5);
         job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
     }
 
@@ -185,12 +185,12 @@
     private static void generateBubbleMergeGraphJob(String jobName, String outputPath) throws IOException {
         PregelixJob job = new PregelixJob(jobName);
         job.setVertexClass(BubbleMergeVertex.class);
-        job.setVertexInputFormatClass(DataCleanInputFormat.class);
+        job.setVertexInputFormatClass(NaiveAlgorithmForPathMergeInputFormat.class);
         job.setVertexOutputFormatClass(DataCleanOutputFormat.class);
         job.setDynamicVertexValueSize(true);
         job.setOutputKeyClass(PositionWritable.class);
         job.setOutputValueClass(VertexValueWritable.class);
-        job.getConfiguration().setInt(BubbleMergeVertex.KMER_SIZE, 3);
+        job.getConfiguration().setInt(BubbleMergeVertex.KMER_SIZE, 5);
         job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
     }
 
@@ -203,7 +203,7 @@
         //genNaiveAlgorithmForMergeGraph();
         //genLogAlgorithmForMergeGraph();
         //genP3ForMergeGraph();
-        genTipAddGraph();
+        //genTipAddGraph();
         genTipRemoveGraph();
         genBridgeAddGraph();
         genBridgeRemoveGraph();
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BridgeRemoveSmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BridgeRemoveSmallTestSuite.java
index 5b641ff..397c514 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BridgeRemoveSmallTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BridgeRemoveSmallTestSuite.java
@@ -43,26 +43,15 @@
 public class BridgeRemoveSmallTestSuite extends TestSuite {
     private static final Logger LOGGER = Logger.getLogger(BridgeRemoveSmallTestSuite.class.getName());
 
-    public static final String PreFix = "data/input"; //"graphbuildresult";
+    public static final String PreFix = "data/actual"; //"graphbuildresult";
     public static final String[] TestDir = { PreFix + File.separator
-    + "pathmerge_tip"};/*, PreFix + File.separator
-            /*+ "CyclePath"};, PreFix + File.separator
-            + "SimplePath", PreFix + File.separator
-            + "SinglePath", PreFix + File.separator
-            + "TreePath"};*/
-           /* + "2", PreFix + File.separator + "3", PreFix + File.separator + "4", PreFix + File.separator + "5",
-            PreFix + File.separator + "6", PreFix + File.separator + "7", PreFix + File.separator + "8",
-            PreFix + File.separator + "9", PreFix + File.separator + "TwoKmer", PreFix + File.separator + "ThreeKmer",
-            PreFix + File.separator + "SinglePath", PreFix + File.separator + "SimplePath",
-            PreFix + File.separator + "Path", PreFix + File.separator + "BridgePath",
-            PreFix + File.separator + "CyclePath", PreFix + File.separator + "RingPath",
-            PreFix + File.separator + "LongPath", PreFix + File.separator + "TreePath" };*/
-    private static final String ACTUAL_RESULT_DIR = "actual";
+    + "pathmerge/P4ForMergeGraph/bin/tworeads"};
+    private static final String ACTUAL_RESULT_DIR = "data/actual/bridgeremove";
     private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
     private static final String PATH_TO_CLUSTER_STORE = "src/test/resources/cluster/stores.properties";
     private static final String PATH_TO_CLUSTER_PROPERTIES = "src/test/resources/cluster/cluster.properties";
     private static final String PATH_TO_JOBS = "src/test/resources/jobs/";
-    private static final String PATH_TO_ONLY = "src/test/resources/only.txt";
+    private static final String PATH_TO_ONLY = "src/test/resources/only_bridgeremove.txt";
 
     public static final String HDFS_INPUTPATH = "/PathTestSet";
 
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleMergeSmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleMergeSmallTestSuite.java
index 9e98cb6..a94d31c 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleMergeSmallTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleMergeSmallTestSuite.java
@@ -45,24 +45,13 @@
 
     public static final String PreFix = "data/input"; //"graphbuildresult";
     public static final String[] TestDir = { PreFix + File.separator
-    + "pathmerge"};/*, PreFix + File.separator
-            /*+ "CyclePath"};, PreFix + File.separator
-            + "SimplePath", PreFix + File.separator
-            + "SinglePath", PreFix + File.separator
-            + "TreePath"};*/
-           /* + "2", PreFix + File.separator + "3", PreFix + File.separator + "4", PreFix + File.separator + "5",
-            PreFix + File.separator + "6", PreFix + File.separator + "7", PreFix + File.separator + "8",
-            PreFix + File.separator + "9", PreFix + File.separator + "TwoKmer", PreFix + File.separator + "ThreeKmer",
-            PreFix + File.separator + "SinglePath", PreFix + File.separator + "SimplePath",
-            PreFix + File.separator + "Path", PreFix + File.separator + "BridgePath",
-            PreFix + File.separator + "CyclePath", PreFix + File.separator + "RingPath",
-            PreFix + File.separator + "LongPath", PreFix + File.separator + "TreePath" };*/
-    private static final String ACTUAL_RESULT_DIR = "actual";
+    + "graphs/bubblemerge/fr_bubble"};
+    private static final String ACTUAL_RESULT_DIR = "data/actual/bubblemerge";
     private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
     private static final String PATH_TO_CLUSTER_STORE = "src/test/resources/cluster/stores.properties";
     private static final String PATH_TO_CLUSTER_PROPERTIES = "src/test/resources/cluster/cluster.properties";
     private static final String PATH_TO_JOBS = "src/test/resources/jobs/";
-    private static final String PATH_TO_ONLY = "src/test/resources/only.txt";
+    private static final String PATH_TO_ONLY = "src/test/resources/only_bubblemerge.txt";
 
     public static final String HDFS_INPUTPATH = "/PathTestSet";
 
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
index 44d24d6..79a13b3 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
@@ -43,10 +43,13 @@
 public class PathMergeSmallTestSuite extends TestSuite {
     private static final Logger LOGGER = Logger.getLogger(PathMergeSmallTestSuite.class.getName());
 
-    public static final String PreFix = "data/PathTestSet_bidirection"; //"graphbuildresult";
+    public static final String PreFix = "data/actual"; //"graphbuildresult";
     public static final String[] TestDir = { PreFix + File.separator
-    + "tworeads_6"};/*
-    + "2", PreFix + File.separator
+    + "bubblemerge/BubbleMergeGraph/bin/small_bubble"};
+    //+ "tipremove/TipRemoveGraph/bin/fr_with_tip"};
+    //+ "graphs/pathmerge/singleread"};
+    //+ "bridgeadd/BridgeAddGraph/bin/tworeads"};
+    /*+ "2", PreFix + File.separator
     + "3", PreFix + File.separator
     + "4", PreFix + File.separator
     + "5", PreFix + File.separator
@@ -54,21 +57,8 @@
     + "7", PreFix + File.separator
     + "8", PreFix + File.separator
     + "9", PreFix + File.separator
-    + "tworeads"}; 
-    /*+ "tipremove/TipRemoveGraph/bin/tworeads"};
-    + "bridgeadd/BridgeAddGraph/bin/tworeads"};, PreFix + File.separator
-    + "tipadd/TipAddGraph/bin/read"}, PreFix + File.separator
-            /*+ "CyclePath"};, PreFix + File.separator
-            + "SimplePath", PreFix + File.separator
-            + "SinglePath", PreFix + File.separator
-            + "TreePath"};*/
-           /* + "2", PreFix + File.separator + "3", PreFix + File.separator + "4", PreFix + File.separator + "5",
-            PreFix + File.separator + "6", PreFix + File.separator + "7", PreFix + File.separator + "8",
-            PreFix + File.separator + "9", PreFix + File.separator + "TwoKmer", PreFix + File.separator + "ThreeKmer",
-            PreFix + File.separator + "SinglePath", PreFix + File.separator + "SimplePath",
-            PreFix + File.separator + "Path", PreFix + File.separator + "BridgePath",
-            PreFix + File.separator + "CyclePath", PreFix + File.separator + "RingPath",
-            PreFix + File.separator + "LongPath", PreFix + File.separator + "TreePath" };*/
+    + "tworeads3", PreFix + File.separator
+    + "tworeads_6"};*/
     private static final String ACTUAL_RESULT_DIR = "data/actual/pathmerge";
     private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
     private static final String PATH_TO_CLUSTER_STORE = "src/test/resources/cluster/stores.properties";
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveSmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveSmallTestSuite.java
index e174bd9..def24e4 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveSmallTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveSmallTestSuite.java
@@ -43,20 +43,10 @@
 public class TipRemoveSmallTestSuite extends TestSuite {
     private static final Logger LOGGER = Logger.getLogger(TipRemoveSmallTestSuite.class.getName());
     //P4ForMergeGraph/bin/read
-    public static final String PreFix = "data/actual"; //"graphbuildresult";
+    public static final String PreFix = "data/input"; //"graphbuildresult";
     public static final String[] TestDir = { PreFix + File.separator
-    + "bridgeadd/BridgeAddGraph/bin/tworeads"};/*, PreFix + File.separator
-            /*+ "CyclePath"};, PreFix + File.separator
-            + "SimplePath", PreFix + File.separator
-            + "SinglePath", PreFix + File.separator
-            + "TreePath"};*/
-           /* + "2", PreFix + File.separator + "3", PreFix + File.separator + "4", PreFix + File.separator + "5",
-            PreFix + File.separator + "6", PreFix + File.separator + "7", PreFix + File.separator + "8",
-            PreFix + File.separator + "9", PreFix + File.separator + "TwoKmer", PreFix + File.separator + "ThreeKmer",
-            PreFix + File.separator + "SinglePath", PreFix + File.separator + "SimplePath",
-            PreFix + File.separator + "Path", PreFix + File.separator + "BridgePath",
-            PreFix + File.separator + "CyclePath", PreFix + File.separator + "RingPath",
-            PreFix + File.separator + "LongPath", PreFix + File.separator + "TreePath" };*/
+    + "graphs/tipremove/fr_with_tip"};
+    //+ "bridgeadd/BridgeAddGraph/bin/tworeads"};
     private static final String ACTUAL_RESULT_DIR = "data/actual/tipremove";
     private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
     private static final String PATH_TO_CLUSTER_STORE = "src/test/resources/cluster/stores.properties";
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/graphbuilding/JobRunStepByStepTest.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/graphbuilding/JobRunStepByStepTest.java
index cc9e2d2..3531ec1 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/graphbuilding/JobRunStepByStepTest.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/graphbuilding/JobRunStepByStepTest.java
@@ -50,7 +50,7 @@
     private static final String ACTUAL_RESULT_DIR = "actual";
     private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
 
-    private static final String DATA_INPUT_PATH = "data/input/singleread";
+    private static final String DATA_INPUT_PATH = "data/graphbuild.test/tworead3.txt";
     private static final String HDFS_INPUT_PATH = "/webmap";
     private static final String HDFS_OUTPUT_PATH = "/webmap_result";
 
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/BridgeRemoveGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/BridgeRemoveGraph.xml
index b36258a..f9b801a 100644
--- a/genomix/genomix-pregelix/src/test/resources/jobs/BridgeRemoveGraph.xml
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/BridgeRemoveGraph.xml
@@ -96,7 +96,7 @@
 <property><name>io.sort.mb</name><value>100</value></property>
 <property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
 <property><name>io.sort.factor</name><value>10</value></property>
-<property><name>BasicPathMergeVertex.kmerSize</name><value>3</value></property>
+<property><name>BasicPathMergeVertex.kmerSize</name><value>5</value></property>
 <property><name>mapred.task.profile</name><value>false</value></property>
 <property><name>job.end.retry.interval</name><value>30000</value></property>
 <property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/BubbleMergeGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/BubbleMergeGraph.xml
index 1b5cf0c..605a004 100644
--- a/genomix/genomix-pregelix/src/test/resources/jobs/BubbleMergeGraph.xml
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/BubbleMergeGraph.xml
@@ -99,7 +99,7 @@
 <property><name>mapred.task.profile</name><value>false</value></property>
 <property><name>job.end.retry.interval</name><value>30000</value></property>
 <property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
-<property><name>BubbleMergeVertex.kmerSize</name><value>3</value></property>
+<property><name>BubbleMergeVertex.kmerSize</name><value>5</value></property>
 <property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
 <property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
 <property><name>webinterface.private.actions</name><value>false</value></property>
@@ -122,7 +122,7 @@
 <property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
 <property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
 <property><name>hadoop.logfile.size</name><value>10000000</value></property>
-<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.DataCleanInputFormat</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.NaiveAlgorithmForPathMergeInputFormat</value></property>
 <property><name>mapred.job.queue.name</name><value>default</value></property>
 <property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
 <property><name>pregelix.incStateLength</name><value>true</value></property>
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/P4ForMergeGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/P4ForMergeGraph.xml
index ae0dc7e..5ef1509 100644
--- a/genomix/genomix-pregelix/src/test/resources/jobs/P4ForMergeGraph.xml
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/P4ForMergeGraph.xml
@@ -96,7 +96,7 @@
 <property><name>io.sort.mb</name><value>100</value></property>
 <property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
 <property><name>io.sort.factor</name><value>10</value></property>
-<property><name>BasicPathMergeVertex.kmerSize</name><value>3</value></property>
+<property><name>BasicPathMergeVertex.kmerSize</name><value>5</value></property>
 <property><name>mapred.task.profile</name><value>false</value></property>
 <property><name>job.end.retry.interval</name><value>30000</value></property>
 <property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
@@ -122,7 +122,7 @@
 <property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
 <property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
 <property><name>hadoop.logfile.size</name><value>10000000</value></property>
-<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.NaiveAlgorithmForPathMergeInputFormat</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.DataCleanInputFormat</value></property>
 <property><name>mapred.job.queue.name</name><value>default</value></property>
 <property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
 <property><name>pregelix.incStateLength</name><value>true</value></property>
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/TipRemoveGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/TipRemoveGraph.xml
index 1fcacc9..588cc9f 100644
--- a/genomix/genomix-pregelix/src/test/resources/jobs/TipRemoveGraph.xml
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/TipRemoveGraph.xml
@@ -96,7 +96,7 @@
 <property><name>io.sort.mb</name><value>100</value></property>
 <property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
 <property><name>io.sort.factor</name><value>10</value></property>
-<property><name>BasicPathMergeVertex.kmerSize</name><value>3</value></property>
+<property><name>BasicPathMergeVertex.kmerSize</name><value>5</value></property>
 <property><name>mapred.task.profile</name><value>false</value></property>
 <property><name>job.end.retry.interval</name><value>30000</value></property>
 <property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
@@ -122,7 +122,7 @@
 <property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
 <property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
 <property><name>hadoop.logfile.size</name><value>10000000</value></property>
-<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.DataCleanInputFormat</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.NaiveAlgorithmForPathMergeInputFormat</value></property>
 <property><name>mapred.job.queue.name</name><value>default</value></property>
 <property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
 <property><name>pregelix.incStateLength</name><value>true</value></property>