changeset 170:86894c5e5fef

*** empty log message ***
author tkaito
date Fri, 29 Aug 2008 18:16:03 +0900
parents 31427856d0bd
children c61a52e12161
files src/pathfinder/mergetest/test/RepCommandOptimizeTest.java
diffstat 1 files changed, 40 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/src/pathfinder/mergetest/test/RepCommandOptimizeTest.java	Fri Aug 29 13:37:38 2008 +0900
+++ b/src/pathfinder/mergetest/test/RepCommandOptimizeTest.java	Fri Aug 29 18:16:03 2008 +0900
@@ -12,15 +12,14 @@
 public class RepCommandOptimizeTest {
 	//テストコマンド (command,string,lineno,id)
 	static String[] test1 = {
-			Integer.toString(REP.REPCMD_INSERT),"TEST0","3","1",
-			Integer.toString(REP.REPCMD_INSERT),"TEST1","3","2",
-			Integer.toString(REP.REPCMD_DELETE),"TEST2","1","3",
-			Integer.toString(REP.REPCMD_DELETE),"TEST0","3","4",
-			Integer.toString(REP.REPCMD_INSERT),"TEST1","3","5",
-			Integer.toString(REP.REPCMD_INSERT),"TEST2","2","6",
-			Integer.toString(REP.REPCMD_INSERT),"TEST0","1","7",
-			Integer.toString(REP.REPCMD_DELETE),"TEST1","10","8"
-			
+			Integer.toString(REP.REPCMD_INSERT),"A","1","1",
+			Integer.toString(REP.REPCMD_INSERT),"C","2","2",
+			Integer.toString(REP.REPCMD_INSERT),"A","3","3",
+			Integer.toString(REP.REPCMD_INSERT),"B","3","4",
+			Integer.toString(REP.REPCMD_DELETE),"?","2","5",
+			Integer.toString(REP.REPCMD_DELETE),"?","3","6",
+			Integer.toString(REP.REPCMD_INSERT),"B","3","7",
+			Integer.toString(REP.REPCMD_DELETE),"?","1","8"
 			
 	};
 
@@ -58,14 +57,11 @@
 		}
 	}
 
-	LinkedList<REPCommand> optimize(LinkedList<REPCommand> inp){
+	LinkedList<REPCommand> optimize(LinkedList<REPCommand> input){
 		LinkedList<REPCommand> output = new LinkedList<REPCommand>();
-		LinkedList<REPCommand> input = new LinkedList<REPCommand>();
-		output = reverse(inp);
-		input = reverse(inp);
-		for(int i = 0; i < input.size(); i++){
-			REPCommand r = input.get(i);
-			//REPCommand d = output.get(i);
+		output = reverse(input);
+		for(int i = 0; i < output.size(); i++){
+			REPCommand r = output.get(i);
 			switch(r.cmd){
 			case REP.REPCMD_INSERT:
 				break;
@@ -86,27 +82,47 @@
 	}
 	private void optimizedAddDelete(LinkedList<REPCommand> output, REPCommand r, int ln) {
 		int lineno = r.lineno;
-		REPCommand d = output.get(ln);
+		int minln = output.size();
 		for(int i = ln; i < output.size(); i++){
 			REPCommand s = output.get(i);
 			if(s.cmd==REP.REPCMD_INSERT) {
 				if(s.lineno < lineno){
-					lineno ++;
-					if(s.lineno == lineno){
-						output.remove(d);
-						output.remove(s);
-						break;
+					lineno --;
+					//System.out.println(ln);
+				}else if(s.lineno == lineno){
+					if(s.lineno < minln){
+						minln = s.lineno;
 					}
+					output.remove(r);
+					output.remove(s);
+					break;
 				}
+				
 			}else if(s.cmd==REP.REPCMD_DELETE){
 				if(s.lineno < lineno){
-					lineno --;
+					lineno ++;
+					//System.out.println("eid = " + r.eid + "lineno =  " + lineno);
 				}
 			}else{
 				System.out.println("There are no such commands.");
 			}
 		}	
+		lineNumberCorrection(output,minln);
 	}
+	
+	private void lineNumberCorrection(LinkedList<REPCommand> opt, int ln) {
+		int i = 0;
+		for(REPCommand o : opt){
+			if(ln < o.lineno) i++;
+		}
+		if(i == opt.size()){
+			for(int j = 0; j < opt.size(); j++){
+				REPCommand c = opt.get(j);
+				c.lineno -= 1;
+			}
+		}
+	}
+
 	void printCmdList(LinkedList<REPCommand> before, LinkedList<REPCommand> after){
 		System.out.println("---------- CmdList1 ----------");
 		for(REPCommand r: before){
@@ -151,7 +167,7 @@
 		
 		RepCommandOptimizeTest rco = new RepCommandOptimizeTest();
 		rco.makeCommand(test1);
-		java.util.Collections.shuffle(cmdlist);
+		//java.util.Collections.shuffle(cmdlist);
 		rco.printCmdList(cmdlist, rco.optimize(cmdlist));
 		rco.edit(cmdlist, rco.optimize(cmdlist));
 		rco.printText();