annotate test/RepCommandOptimizeTest.java @ 382:4b87f89b3afd

REP Session Manager (Java version) new structure
author one@firefly.cr.ie.u-ryukyu.ac.jp
date Mon, 10 Nov 2008 22:07:45 +0900
parents f9fa876d3539
children 6f356d160e58
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
226
e4ed00c82422 optimizer test
kent
parents:
diff changeset
1 package test;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
2
e4ed00c82422 optimizer test
kent
parents:
diff changeset
3 import java.util.LinkedList;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
4 import java.util.List;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
5
e4ed00c82422 optimizer test
kent
parents:
diff changeset
6 import rep.REPCommand;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
7 import rep.REP;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
8 import rep.optimizers.NullOptimizer;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
9 import rep.optimizers.DeleteInsertOptimizer;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
10 import rep.optimizers.REPCommandOptimizer;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
11
e4ed00c82422 optimizer test
kent
parents:
diff changeset
12
e4ed00c82422 optimizer test
kent
parents:
diff changeset
13
e4ed00c82422 optimizer test
kent
parents:
diff changeset
14 public class RepCommandOptimizeTest {
e4ed00c82422 optimizer test
kent
parents:
diff changeset
15 //テストコマンド (command,string,lineno,eid)
e4ed00c82422 optimizer test
kent
parents:
diff changeset
16 static String[] test1 = {
271
kono
parents: 226
diff changeset
17 Integer.toString(REP.REPCMD_DELETE.id),"d","1","1",
kono
parents: 226
diff changeset
18 Integer.toString(REP.REPCMD_INSERT.id),"B","3","2",
kono
parents: 226
diff changeset
19 Integer.toString(REP.REPCMD_INSERT.id),"B","1","3",
kono
parents: 226
diff changeset
20 Integer.toString(REP.REPCMD_INSERT.id),"C","3","4",
kono
parents: 226
diff changeset
21 Integer.toString(REP.REPCMD_DELETE.id),"d","13","5",
kono
parents: 226
diff changeset
22 Integer.toString(REP.REPCMD_DELETE.id),"d","3","6",
kono
parents: 226
diff changeset
23 Integer.toString(REP.REPCMD_DELETE.id),"d","1","7",
kono
parents: 226
diff changeset
24 Integer.toString(REP.REPCMD_INSERT.id),"A","5","8",
kono
parents: 226
diff changeset
25 Integer.toString(REP.REPCMD_DELETE.id),"d","1","9",
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
26 Integer.toString(REP.REPCMD_DELETE.id),"d","0","10",
271
kono
parents: 226
diff changeset
27 Integer.toString(REP.REPCMD_INSERT.id),"B","10","11",
kono
parents: 226
diff changeset
28 Integer.toString(REP.REPCMD_INSERT.id),"C","3","13",
kono
parents: 226
diff changeset
29 Integer.toString(REP.REPCMD_DELETE.id),"d","2","14",
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
30 Integer.toString(REP.REPCMD_DELETE.id),"d","0","14",
271
kono
parents: 226
diff changeset
31 Integer.toString(REP.REPCMD_DELETE.id),"d","3","15",
kono
parents: 226
diff changeset
32 Integer.toString(REP.REPCMD_DELETE.id),"d","1","16",
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
33 Integer.toString(REP.REPCMD_INSERT.id),"A","0","17",
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
34 Integer.toString(REP.REPCMD_INSERT.id),"K","0","17",
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
35 Integer.toString(REP.REPCMD_DELETE.id),"d","1","18",
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
36 Integer.toString(REP.REPCMD_NOP.id),"","0","19",
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
37 Integer.toString(REP.REPCMD_NOP.id),"","0","20",
226
e4ed00c82422 optimizer test
kent
parents:
diff changeset
38 };
e4ed00c82422 optimizer test
kent
parents:
diff changeset
39
e4ed00c82422 optimizer test
kent
parents:
diff changeset
40 static private String[] text1d = {
e4ed00c82422 optimizer test
kent
parents:
diff changeset
41 "aaa", "bbb", "ccc", "ddd", "eee",
e4ed00c82422 optimizer test
kent
parents:
diff changeset
42 "fff", "ggg", "hhh", "iii", "jjj",
e4ed00c82422 optimizer test
kent
parents:
diff changeset
43 "kkk", "lll", "mmm", "nnn", "ooo",
e4ed00c82422 optimizer test
kent
parents:
diff changeset
44 "ppp", "qqq", "rrr", "sss", "ttt",
e4ed00c82422 optimizer test
kent
parents:
diff changeset
45 "uuu", "vvv", "www", "xxx", "yyy", "zzz"
e4ed00c82422 optimizer test
kent
parents:
diff changeset
46 };
e4ed00c82422 optimizer test
kent
parents:
diff changeset
47
e4ed00c82422 optimizer test
kent
parents:
diff changeset
48 static private String[] text2d = {
e4ed00c82422 optimizer test
kent
parents:
diff changeset
49 "aaa", "bbb", "ccc", "ddd", "eee",
e4ed00c82422 optimizer test
kent
parents:
diff changeset
50 "fff", "ggg", "hhh", "iii", "jjj",
e4ed00c82422 optimizer test
kent
parents:
diff changeset
51 "kkk", "lll", "mmm", "nnn", "ooo",
e4ed00c82422 optimizer test
kent
parents:
diff changeset
52 "ppp", "qqq", "rrr", "sss", "ttt",
e4ed00c82422 optimizer test
kent
parents:
diff changeset
53 "uuu", "vvv", "www", "xxx", "yyy", "zzz"
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
54 };
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
55
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
56 private static int err=0;
226
e4ed00c82422 optimizer test
kent
parents:
diff changeset
57
e4ed00c82422 optimizer test
kent
parents:
diff changeset
58 public static List<REPCommand> makeCommandList(String[] str){
e4ed00c82422 optimizer test
kent
parents:
diff changeset
59 int seq = 0;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
60 LinkedList<REPCommand> cmdlist = new LinkedList<REPCommand>();
e4ed00c82422 optimizer test
kent
parents:
diff changeset
61 try{
e4ed00c82422 optimizer test
kent
parents:
diff changeset
62 for( int i = 0;i < str.length; i+=4){
e4ed00c82422 optimizer test
kent
parents:
diff changeset
63 int cmd = Integer.parseInt(str[i]);
e4ed00c82422 optimizer test
kent
parents:
diff changeset
64 int lineno = Integer.parseInt(str[i+2]);
e4ed00c82422 optimizer test
kent
parents:
diff changeset
65
e4ed00c82422 optimizer test
kent
parents:
diff changeset
66 int sid = Integer.parseInt(str[i+3]);
e4ed00c82422 optimizer test
kent
parents:
diff changeset
67 int eid = sid;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
68 cmdlist.add(new REPCommand(cmd, sid, eid, seq++, lineno, str[i+1].length(), str[i+1]));
e4ed00c82422 optimizer test
kent
parents:
diff changeset
69 }
e4ed00c82422 optimizer test
kent
parents:
diff changeset
70 }catch(Exception e){
e4ed00c82422 optimizer test
kent
parents:
diff changeset
71 e.printStackTrace();
e4ed00c82422 optimizer test
kent
parents:
diff changeset
72 }
e4ed00c82422 optimizer test
kent
parents:
diff changeset
73 return cmdlist;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
74 }
e4ed00c82422 optimizer test
kent
parents:
diff changeset
75
e4ed00c82422 optimizer test
kent
parents:
diff changeset
76
e4ed00c82422 optimizer test
kent
parents:
diff changeset
77 public static void printCmdList(List<REPCommand> list){
e4ed00c82422 optimizer test
kent
parents:
diff changeset
78 for(REPCommand r: list){
e4ed00c82422 optimizer test
kent
parents:
diff changeset
79 System.out.println(r.toString());
e4ed00c82422 optimizer test
kent
parents:
diff changeset
80 }
e4ed00c82422 optimizer test
kent
parents:
diff changeset
81 System.out.println("Total = " + list.size());
e4ed00c82422 optimizer test
kent
parents:
diff changeset
82 }
e4ed00c82422 optimizer test
kent
parents:
diff changeset
83
e4ed00c82422 optimizer test
kent
parents:
diff changeset
84 public static void printText(Text text){
e4ed00c82422 optimizer test
kent
parents:
diff changeset
85 text.printAllText();
e4ed00c82422 optimizer test
kent
parents:
diff changeset
86 }
e4ed00c82422 optimizer test
kent
parents:
diff changeset
87
e4ed00c82422 optimizer test
kent
parents:
diff changeset
88 public static void main(String[] s){
e4ed00c82422 optimizer test
kent
parents:
diff changeset
89 REPCommandOptimizer rco;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
90
e4ed00c82422 optimizer test
kent
parents:
diff changeset
91 if (true) rco = new DeleteInsertOptimizer(); //
e4ed00c82422 optimizer test
kent
parents:
diff changeset
92 else rco = new NullOptimizer(); // なにも最適化しない
e4ed00c82422 optimizer test
kent
parents:
diff changeset
93
e4ed00c82422 optimizer test
kent
parents:
diff changeset
94 List<REPCommand> cmdlist;
e4ed00c82422 optimizer test
kent
parents:
diff changeset
95
e4ed00c82422 optimizer test
kent
parents:
diff changeset
96 cmdlist = makeCommandList(test1);
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
97 int total = 0;
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
98 while(cmdlist.size()>0) {
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
99 Text text1 = new Text(text1d);
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
100 Text text2 = new Text(text2d);
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
101 java.util.Collections.shuffle(cmdlist);
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
102 test(rco, cmdlist, text1, text2);
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
103 total++;
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
104 cmdlist.remove(0);
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
105 }
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
106 System.out.println("Errors "+err+"/"+total+".");
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
107
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
108 }
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
109
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
110
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
111 private static void test(REPCommandOptimizer rco, List<REPCommand> cmdlist,
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
112 Text text1, Text text2) {
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
113 List<REPCommand> result; // optimize
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
114 // this command list is applied to a text. and print the text.
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
115 text1.edit(cmdlist);
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
116 result = rco.optimize(cmdlist);
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
117 // this command list applied to other text, and print it.
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
118 text2.edit(result);
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
119 // check two texts.
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
120 if(!text1.equals(text2)){
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
121 System.out.println("two texts not match");
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
122 print(cmdlist, result, text1, text2);
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
123 err++;
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
124 }
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
125 }
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
126
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
127 private static void print(List<REPCommand> cmdlist,
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
128 List<REPCommand> result,
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
129 Text text1, Text text2) {
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
130
226
e4ed00c82422 optimizer test
kent
parents:
diff changeset
131 // print non optimized command list
e4ed00c82422 optimizer test
kent
parents:
diff changeset
132 System.out.println("---------- CmdList before optimized ----------");
e4ed00c82422 optimizer test
kent
parents:
diff changeset
133 printCmdList(cmdlist);
e4ed00c82422 optimizer test
kent
parents:
diff changeset
134
e4ed00c82422 optimizer test
kent
parents:
diff changeset
135 // print optimized command list.
e4ed00c82422 optimizer test
kent
parents:
diff changeset
136 System.out.println("---------- CmdList after optimized ----------");
e4ed00c82422 optimizer test
kent
parents:
diff changeset
137 printCmdList(result);
e4ed00c82422 optimizer test
kent
parents:
diff changeset
138
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
139 System.out.println("---------- Text difference ------------------");
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
140 int max = max(text1.size(),text2.size());
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
141 for(int i=0;i<max;i++) {
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
142 System.out.println(i+":\t"+text1.get(i)+"\t"+text2.get(i));
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
143 }
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
144 }
226
e4ed00c82422 optimizer test
kent
parents:
diff changeset
145
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
146
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
147
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
148 private static int max(int size, int size2) {
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
149 return size>size2?size:size2;
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
150 }
226
e4ed00c82422 optimizer test
kent
parents:
diff changeset
151
e4ed00c82422 optimizer test
kent
parents:
diff changeset
152 }
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
153