changeset 226:e4ed00c82422

optimizer test
author kent
date Sun, 31 Aug 2008 13:33:33 +0900
parents e173411a2499
children cbd67817e9cd
files test/RepCommandOptimizeTest.java test/Text.java
diffstat 2 files changed, 190 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/RepCommandOptimizeTest.java	Sun Aug 31 13:33:33 2008 +0900
@@ -0,0 +1,126 @@
+package test;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import rep.REPCommand;
+import rep.REP;
+import rep.optimizers.NullOptimizer;
+import rep.optimizers.DeleteInsertOptimizer;
+import rep.optimizers.REPCommandOptimizer;
+
+
+
+public class RepCommandOptimizeTest {
+	//テストコマンド (command,string,lineno,eid)
+	static String[] test1 = {
+		Integer.toString(REP.REPCMD_DELETE),"d","1","1",
+		Integer.toString(REP.REPCMD_INSERT),"B","3","2",
+		Integer.toString(REP.REPCMD_INSERT),"B","1","3",
+		Integer.toString(REP.REPCMD_INSERT),"C","3","4",
+		Integer.toString(REP.REPCMD_DELETE),"d","13","5",
+		Integer.toString(REP.REPCMD_DELETE),"d","3","6",
+		Integer.toString(REP.REPCMD_DELETE),"d","1","7",
+		Integer.toString(REP.REPCMD_INSERT),"A","5","8",
+		Integer.toString(REP.REPCMD_DELETE),"d","1","9",
+		Integer.toString(REP.REPCMD_DELETE),"d","1","10",
+		Integer.toString(REP.REPCMD_INSERT),"B","10","11",
+		Integer.toString(REP.REPCMD_INSERT),"B","1","12",
+		Integer.toString(REP.REPCMD_INSERT),"C","3","13",
+		Integer.toString(REP.REPCMD_DELETE),"d","2","14",
+		Integer.toString(REP.REPCMD_DELETE),"d","3","15",
+		Integer.toString(REP.REPCMD_DELETE),"d","1","16",
+		Integer.toString(REP.REPCMD_INSERT),"A","3","17",
+		Integer.toString(REP.REPCMD_DELETE),"d","1","18"
+	};
+	
+	static private String[] text1d = {
+		"aaa", "bbb", "ccc", "ddd", "eee",
+		"fff", "ggg", "hhh", "iii", "jjj",
+		"kkk", "lll", "mmm", "nnn", "ooo",
+		"ppp", "qqq", "rrr", "sss", "ttt",
+		"uuu", "vvv", "www", "xxx", "yyy", "zzz"
+	};	
+
+	static private String[] text2d = {
+		"aaa", "bbb", "ccc", "ddd", "eee",
+		"fff", "ggg", "hhh", "iii", "jjj",
+		"kkk", "lll", "mmm", "nnn", "ooo",
+		"ppp", "qqq", "rrr", "sss", "ttt",
+		"uuu", "vvv", "www", "xxx", "yyy", "zzz"	
+	};	
+	
+	public static List<REPCommand> makeCommandList(String[] str){
+		int seq = 0;
+		LinkedList<REPCommand> cmdlist = new LinkedList<REPCommand>();
+		try{
+			for( int i = 0;i < str.length; i+=4){
+				int cmd = Integer.parseInt(str[i]);
+				int lineno = Integer.parseInt(str[i+2]);
+
+				int sid = Integer.parseInt(str[i+3]);
+				int eid = sid;
+				cmdlist.add(new REPCommand(cmd, sid, eid, seq++, lineno, str[i+1].length(), str[i+1]));
+			}
+		}catch(Exception e){
+			e.printStackTrace();
+		}
+		return cmdlist;
+	}
+
+
+	public static void printCmdList(List<REPCommand> list){
+		for(REPCommand r: list){
+			System.out.println(r.toString());
+		}
+		System.out.println("Total = " + list.size());
+	}
+
+	public static void printText(Text text){
+		text.printAllText();
+	}
+	
+	public static void main(String[] s){
+		REPCommandOptimizer rco;
+
+		if (true)  rco = new DeleteInsertOptimizer();  //
+		else       rco = new NullOptimizer();  // なにも最適化しない
+
+		List<REPCommand> result = new LinkedList<REPCommand>();
+		List<REPCommand> cmdlist;
+		Text text1 = new Text(text1d);
+		Text text2 = new Text(text2d);
+		
+		cmdlist = makeCommandList(test1);
+		java.util.Collections.shuffle(cmdlist);
+		
+		// print non optimized command list
+		System.out.println("---------- CmdList before optimized ----------");
+		printCmdList(cmdlist);
+
+		// this command list is applied to a text. and print the text. 
+		text1.edit(cmdlist);
+		System.out.println("---text which applied above commands---");
+		printText(text1);
+		
+		// optimize
+		result = rco.optimize(cmdlist);
+		
+		// print optimized command list.
+		System.out.println("---------- CmdList after optimized ----------");
+		printCmdList(result);
+		
+		// this command list applied to other text, and print it.
+		text2.edit(result);
+		System.out.println("---text which applied above commands---");
+		printText(text1);
+
+		// check two texts.
+		if(text1.equals(text2)){
+			System.out.println("two texts match.");
+		}else{
+			System.out.println("two texts not match");
+		}
+
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/Text.java	Sun Aug 31 13:33:33 2008 +0900
@@ -0,0 +1,64 @@
+package test;
+
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+import rep.REPCommand;
+import rep.REP;
+
+public class Text {
+
+	List<String> strList;
+
+	public Text(String[] _strings){
+		strList = new LinkedList<String>(Arrays.asList(_strings));
+	}
+	public Text(List<String> _strings){
+		strList = new LinkedList<String>(_strings);
+	}
+	
+	public String insert(int i, String str){
+		assert 0<i && i<strList.size();
+		strList.add(i, str);
+		return null;
+	}
+	public String delete(int i){
+		assert 0<i && i<strList.size();
+		return strList.remove(i);
+	}
+	public String replace(int i, String str){
+		assert 0<i && i<strList.size();
+		String replaced = strList.get(i);
+		strList.set(i, str);
+		return replaced;
+	}
+	public String get(int i){
+		assert 0<i && i<strList.size();
+		return strList.get(i);
+	}
+	public String edit(REPCommand cmd){
+		if (cmd.cmd==REP.REPCMD_INSERT)        return insert(cmd.lineno, cmd.string);
+		else if (cmd.cmd==REP.REPCMD_REPLACE)  return replace(cmd.lineno, cmd.string);
+		else if (cmd.cmd==REP.REPCMD_DELETE)   return delete(cmd.lineno);
+		//else assert false;
+		return null;
+	}
+	public void edit(List<REPCommand> cmdlist){
+		for (REPCommand cmd: cmdlist){
+			edit(cmd);
+		}
+	}
+
+	public int size(){
+		return strList.size();
+	}
+	public void printAllText(){
+		for( String str: strList){
+			System.out.println(str);
+		}
+	}
+	public boolean equals(Text _target){
+		return strList.equals(_target.strList);
+	}
+}