• R/O
  • HTTP
  • SSH
  • HTTPS

提交

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Testcase generation tool for combinatorial interaction testing


Commit MetaInfo

修订版9a5fb23cc33f7b77802f5e7cf76a82c2d189c32a (tree)
时间2018-09-22 01:16:36
作者tallman <tallman189@gmai...>
Commitertallman

Log Message

change source file encoding MS932 to UTF-8.
add launch file.

更改概述

差异

--- /dev/null
+++ b/Main.launch
@@ -0,0 +1,16 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
3+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
4+<listEntry value="/cit_bach/src/main/java/v1/Main.java"/>
5+</listAttribute>
6+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
7+<listEntry value="1"/>
8+</listAttribute>
9+<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="MS932"/>
10+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/>
11+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
12+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="v1.Main"/>
13+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-i ${file_prompt:モデルファイル:${resource_loc:/cit_bach/inputsamples}}"/>
14+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="cit_bach"/>
15+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
16+</launchConfiguration>
--- a/src/main/java/fbt/Main.java
+++ b/src/main/java/fbt/Main.java
@@ -34,21 +34,21 @@ public class Main {
3434 long start = System.currentTimeMillis();
3535
3636 try {
37- // ƒRƒ}ƒ“ƒhˆø”ˆ—
37+ // コマンド引数処理
3838 String errorMessage = processCommandArgument(args);
3939
40- // ƒGƒ‰[o—͐æÝ’è
40+ // エラー出力先設定
4141 Error.setOutputFile(outputFile);
4242
43- // ƒRƒ}ƒ“ƒhˆø”‚ł̃Gƒ‰[o—Í
43+ // コマンド引数でのエラー出力
4444 if (errorMessage != null)
4545 Error.printError(errorMessage);
4646
47- // ƒ‚ƒfƒ‹“ǂݍž‚Ý
47+ // モデル読み込み
4848 // System.err.println("starting reading model");
4949 InputFileData inputfiledata = Inputer.readModel(modelFile);
5050
51- // §–ñˆ— BDDì¬
51+ // 制約処理 BDD作成
5252 ConstraintHandler conhndl = new ConstraintHandler(
5353 inputfiledata.parameterList, inputfiledata.constraintList, inputfiledata.constrainedParameters);
5454
@@ -58,10 +58,10 @@ public class Main {
5858 checkAllTuples(parametermodel, conhndl, inputfiledata);
5959
6060 } catch (OutOfMemoryError e) {
61- Error.printError(Main.language == Main.Language.JP ? "ƒƒ‚ƒŠ•s‘«‚Å‚·D"
61+ Error.printError(Main.language == Main.Language.JP ? "メモリ不足です."
6262 : "Out of memory");
6363 } catch (Exception e) {
64- Error.printError(Main.language == Main.Language.JP ? "ƒvƒƒOƒ‰ƒ€‚ªˆÙíI—¹‚µ‚Ü‚µ‚½D"
64+ Error.printError(Main.language == Main.Language.JP ? "プログラムが異常終了しました."
6565 : "Abnormal termination");
6666 }
6767
@@ -69,13 +69,13 @@ public class Main {
6969 // System.err.println("time: " + (end - start) + "ms");
7070 }
7171
72- // ƒRƒ}ƒ“ƒhˆø”ˆ—
72+ // コマンド引数処理
7373 private static String processCommandArgument(String[] args) {
7474 if (args.length == 0) {
7575 Error.printError("usage: java -jar Program.jar [-i input] [-o output] [-policy] ...");
7676 }
7777
78- // policy‚Ì•\Ž¦
78+ // policyの表示
7979 if (args.length == 1 && args[0].equals("-policy")) {
8080 System.out
8181 .println("This software (CIT-BACH 1.1) is distributed under the zlib license.\n"
@@ -105,7 +105,7 @@ public class Main {
105105 System.exit(0);
106106 }
107107
108- // ƒGƒ‰[•\Ž¦‚ðo—̓tƒ@ƒCƒ‹‚ªŽw’肳‚ê‚é‚Ü‚Å’x‚点‚é
108+ // エラー表示を出力ファイルが指定されるまで遅らせる
109109 String errorMessage = null;
110110
111111 for (int i = 0; i + 1 < args.length; i += 2) {
@@ -120,45 +120,45 @@ public class Main {
120120 randomSeed = Integer.parseInt(str);
121121 } catch (NumberFormatException e) {
122122 // Error.printError("invalid number");
123- errorMessage = Main.language == Main.Language.JP ? "ƒ‰ƒ“ƒ_ƒ€ƒV[ƒh‚É–³Œø‚È’l‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
123+ errorMessage = Main.language == Main.Language.JP ? "ランダムシードに無効な値が指定されています."
124124 : "Invalid random seed";
125125 continue;
126126 }
127127 randomSeed = Math.abs(randomSeed) % (Max_RandomSeed + 1);
128128 } else if (option.equals("-c")) {
129129 if (str.equals("all")) {
130- // ‘S–Ô—…
130+ // 全網羅
131131 strength = -1;
132132 } else {
133133 try {
134134 strength = Integer.parseInt(str);
135135 } catch (NumberFormatException e) {
136136 // Error.printError("invalid number");
137- errorMessage = Main.language == Main.Language.JP ? "–Ô—…“x‚É–³Œø‚È’l‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
137+ errorMessage = Main.language == Main.Language.JP ? "網羅度に無効な値が指定されています."
138138 : "Invalid strength";
139139 continue;
140140 }
141141 if (strength < 2 || MAX_STRENGTH < strength) {
142142 // Error.printError("invalid strength");
143- errorMessage = Main.language == Main.Language.JP ? "–Ô—…“x‚É–³Œø‚È’l‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
143+ errorMessage = Main.language == Main.Language.JP ? "網羅度に無効な値が指定されています."
144144 : "Invalid strength";
145145 continue;
146146 }
147147 }
148148 }
149- // ŒJ‚è•Ô‚µ”
149+ // 繰り返し数
150150 else if (option.equals("-repeat")) {
151151 try {
152152 numOfIterations = Integer.parseInt(str);
153153 } catch (NumberFormatException e) {
154154 // Error.printError("invalid repeating number");
155- errorMessage = Main.language == Main.Language.JP ? "‚­‚è•Ô‚µ”‚É–³Œø‚È’l‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
155+ errorMessage = Main.language == Main.Language.JP ? "くり返し数に無効な値が指定されています."
156156 : "Invalid number of repetition times";
157157 continue;
158158 }
159159 if (numOfIterations <= 0 || numOfIterations > MAX_ITERATIONS) {
160160 // Error.printError("invalid repeating number");
161- errorMessage = Main.language == Main.Language.JP ? "‚­‚è•Ô‚µ”‚É–³Œø‚È’l‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
161+ errorMessage = Main.language == Main.Language.JP ? "くり返し数に無効な値が指定されています."
162162 : "Invalid number of repetition times";
163163 continue;
164164 }
@@ -166,19 +166,19 @@ public class Main {
166166 seedFile = str;
167167 } else if (option.equals("-debug")) {
168168 debugMode = true;
169- // ŽŸ‚̈ø”‚̓_ƒ~[
169+ // 次の引数はダミー
170170 } else if (option.equals("-lang")) {
171171 if (str.matches("JP|jp")) {
172172 Main.language = Main.Language.JP;
173173 } else if (str.matches("EN|en")) {
174174 Main.language = Main.Language.EN;
175175 } else {
176- errorMessage = "–³Œø‚ÈŒ¾Œê‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚· (Invalid Language)";
176+ errorMessage = "無効な言語が指定されています (Invalid Language)";
177177 continue;
178178 }
179179 } else {
180180 // Error.printError("Invalid option");
181- errorMessage = Main.language == Main.Language.JP ? "–³Œø‚ȃIƒvƒVƒ‡ƒ“‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
181+ errorMessage = Main.language == Main.Language.JP ? "無効なオプションが指定されています."
182182 : "Invalid option";
183183 continue;
184184 }
@@ -199,13 +199,13 @@ public class Main {
199199 for (int j = i + 1; j < numOfParameters; j++) {
200200 for (byte v1 = 0; v1 < parametermodel.range[i]; v1++) {
201201 for (byte v2 = 0; v2 < parametermodel.range[j]; v2++) {
202- // pair‚̐¶¬
202+ // pairの生成
203203 Testcase pair = new Testcase(numOfParameters);
204204 pair.quantify();
205205 pair.set(i, v1);
206206 pair.set(j, v2);
207- // pair‚̃`ƒFƒbƒN
208- // ‹Ö‘¥ˆá”½‚È‚çset
207+ // pairのチェック
208+ // 禁則違反ならset
209209 if (conhndl.isPossible(pair) == false) {
210210 // System.out.println("[" + i + ", " + v1 + "]" + ", " +
211211 // "[" + j + ", " + v2 + "]]");
--- a/src/main/java/v1/ConstraintHandler.java
+++ b/src/main/java/v1/ConstraintHandler.java
@@ -22,13 +22,13 @@ public class ConstraintHandler {
2222 bdd = new BDD(sizeOfNodetable, sizeOfCache);
2323 // bdd = new jdd.bdd.debug.DebugBDD(1000,1000);
2424
25- // parameter‚̃ŠƒXƒg
25+ // parameterのリスト
2626 parameters = setBDDforParameter(parameterList);
2727
28- // contrainList‚©‚çAƒm[ƒh‚ðŒÄ‚Ô
28+ // contrainListから、ノードを呼ぶ
2929 bddConstraint = setBddConstraint(constraintList);
3030
31- // boolean •Ï”‚Ì‘”‚ðŒvŽZ
31+ // boolean 変数の総数を計算
3232 // numOfBooleanVariable = computeNumOfBooleanVariables
3333 }
3434
@@ -40,17 +40,17 @@ public class ConstraintHandler {
4040
4141 this.constrainedParameters = constrainedParameters;
4242
43- // parameter‚̃ŠƒXƒg
43+ // parameterのリスト
4444 PList constrainedParameterList = new PList();
4545 for (Integer factor: constrainedParameters) {
4646 constrainedParameterList.add(parameterList.get(factor));
4747 }
4848 parameters = setBDDforParameter(constrainedParameterList);
4949
50- // contrainList‚©‚çAƒm[ƒh‚ðŒÄ‚Ô
50+ // contrainListから、ノードを呼ぶ
5151 bddConstraint = setBddConstraint(constraintList);
5252
53- // boolean •Ï”‚Ì‘”‚ðŒvŽZ
53+ // boolean 変数の総数を計算
5454 // numOfBooleanVariable = computeNumOfBooleanVariables
5555 }
5656
@@ -58,39 +58,39 @@ public class ConstraintHandler {
5858 bdd.printSet(bddConstraint);
5959 }
6060
61- // Šeƒpƒ‰ƒ[ƒ^‚Éboolean•Ï”‚ðŠ„‚è“–‚āD‘”‚àŒvŽZ
61+ // 各パラメータにboolean変数を割り当て.総数も計算
6262 private List<VariableAndBDD> setBDDforParameter(PList parameterList) {
6363 List<VariableAndBDD> res = new ArrayList<VariableAndBDD>();
6464 this.numOfBDDvariables = 0;
6565
6666 for (Parameter p : parameterList) {
67- // BDD•Ï”‚̐ݒè
67+ // BDD変数の設定
6868 int num_vars = 1;
6969 for (int levels = 2;; levels *= 2) {
7070 if (p.value_name.size() < levels)
7171 break;
7272 num_vars++;
7373 }
74- // BDD•Ï”‚Ì‘”‚ðŒvŽZ
74+ // BDD変数の総数を計算
7575 numOfBDDvariables += num_vars;
7676
7777 // boolean variables
78- // ¶¬‚³‚ꂽ‡‚É getVar(v): 0, 1, 2, ..
78+ // 生成された順に getVar(v): 0, 1, 2, ..
7979 int[] var = new int[num_vars];
8080 for (int i = num_vars - 1; i >= 0; i--) {
8181 var[i] = bdd.createVar();
8282 }
8383
84- // §–ñ‚ÌBDD‚̐ݒè
84+ // 制約のBDDの設定
8585 // constraint for invalid values
86- // domain-1ˆÈ‰º‚̐”Žš‚Ì‚Ý—LŒø
87- // bool variables ‚̐”‚Ídomain-1‚ð‚ ‚ç‚킹‚邾‚¯‚Í‚ ‚é
86+ // domain-1以下の数字のみ有効
87+ // bool variables の数はdomain-1をあらわせるだけはある
8888 //
89- // domain-1‚Ì2i•\Œ»‚ł́CÅãˆÊ‚̕ϐ”‚É‚ ‚½‚éƒrƒbƒg‚͏í‚É1
90- // ‚Æ‚ÍŒÀ‚ç‚È‚¢
89+ // domain-1の2進表現では,最上位の変数にあたるビットは常に1
90+ // とは限らない
9191 int f = bdd.getZero();
9292 bdd.ref(f);
93- // domain-1‚æ‚菬‚³‚¢”
93+ // domain-1より小さい数
9494 for (int i = var.length - 1; i >= 0; i--) {
9595 if ((p.value_name.size() - 1 & (0x01 << i)) > 0) {
9696 int g = bdd.getOne();
@@ -115,7 +115,7 @@ public class ConstraintHandler {
115115 }
116116 }
117117
118- // domain - 1Ž©g
118+ // domain - 1自身
119119 int g = bdd.getOne();
120120 bdd.ref(g);
121121 for (int i = var.length - 1; i >= 0; i--) {
@@ -135,7 +135,7 @@ public class ConstraintHandler {
135135 bdd.deref(f);
136136 bdd.deref(g);
137137
138- // var, d ‚ð list‚ɒljÁ
138+ // var, d を listに追加
139139 res.add(new VariableAndBDD(var, d));
140140 }
141141 return res;
@@ -145,14 +145,14 @@ public class ConstraintHandler {
145145 int f = bdd.getOne();
146146 bdd.ref(f);
147147
148- // ƒpƒ‰ƒ[ƒ^‚ł‚©‚í‚È‚¢’l‚ð‚Æ‚Á‚½ê‡‚Éfalse‚Æ‚È‚é‚悤‚É‚·‚é
148+ // パラメータでつかわない値をとった場合にfalseとなるようにする
149149 for (VariableAndBDD vb : parameters) {
150150 int tmp = bdd.ref(bdd.and(f, vb.constraint));
151151 bdd.deref(f);
152152 f = tmp;
153153 }
154154
155- // §–ñŽ®‚̘_—Ï‚ð‚Æ‚é
155+ // 制約式の論理積をとる
156156 for (Node n : constraintList) {
157157 int g = n.evaluate(bdd, parameters, constrainedParameters);
158158 int tmp = bdd.ref(bdd.and(f, g));
@@ -161,7 +161,7 @@ public class ConstraintHandler {
161161 f = tmp;
162162 }
163163
164- // *‚ð•t‰Á
164+ // *を付加
165165 f = extendBddConstraint(f);
166166
167167 return f;
@@ -207,19 +207,19 @@ public class ConstraintHandler {
207207 return f;
208208 }
209209
210- // ƒeƒXƒgƒP[ƒX‚ª§–ñ‚ð–ž‚½‚·‚©
210+ // テストケースが制約を満たすか
211211 boolean isPossibleOld(Testcase test) {
212212 int node = bddConstraint;
213213 boolean[] bv = binarize(test);
214214
215215 while (true) {
216- // P^CP‹U
216+ // 恒真,恒偽
217217 if (node == 0)
218218 return false;
219219 else if (node == 1)
220220 return true;
221221
222- // ‚±‚Ìpos‚Ì0, 1‚̓m[ƒh‚È‚µ
222+ // このposの0, 1はノードなし
223223 if (bv[bdd.getVar(node)] == true)
224224 node = bdd.getHigh(node);
225225 else
@@ -232,13 +232,13 @@ public class ConstraintHandler {
232232 boolean[] bv = binarizeReduced(test);
233233
234234 while (true) {
235- // P^CP‹U
235+ // 恒真,恒偽
236236 if (node == 0)
237237 return false;
238238 else if (node == 1)
239239 return true;
240240
241- // ‚±‚Ìpos‚Ì0, 1‚̓m[ƒh‚È‚µ
241+ // このposの0, 1はノードなし
242242 if (bv[bdd.getVar(node)] == true)
243243 node = bdd.getHigh(node);
244244 else
@@ -247,10 +247,10 @@ public class ConstraintHandler {
247247 }
248248
249249 private boolean[] binarize(Testcase test) {
250- // assert(testcase‚Ì’·‚³ = parameter‚̐”)
250+ // assert(testcaseの長さ = parameterの数)
251251 boolean[] res = new boolean[numOfBDDvariables];
252252 int pos = 0;
253- // ŠeˆöŽq‚Ì’l‚ð2’l‚Å•\Œ»
253+ // 各因子の値を2値で表現
254254 for (int i = 0; i < test.value.length; i++) {
255255 VariableAndBDD p = parameters.get(i);
256256 int lv = test.get(i);
@@ -278,14 +278,14 @@ public class ConstraintHandler {
278278 return res;
279279 }
280280
281- // TreeSet<Integer> constrainedParameters ‚É‚ ‚éparameter‚¾‚¯‚ð2’l‰»
281+ // TreeSet<Integer> constrainedParameters にあるparameterだけを2値化
282282 private boolean[] binarizeReduced(Testcase test) {
283283 boolean[] res = new boolean[numOfBDDvariables];
284284 int pos = 0;
285285 int i = 0;
286286 for (Integer factor: constrainedParameters) {
287287 // VariableAndBDD p = parameters.get(i); <-
288- // parameters ‚ª relevant‚È‚à‚Ì‚¾‚¯‚É‚È‚ê‚΁Cã‹L‚ɕύX
288+ // parameters が relevantなものだけになれば,上記に変更
289289 VariableAndBDD p = parameters.get(i);
290290
291291 int lv = test.get(factor);
@@ -317,7 +317,7 @@ public class ConstraintHandler {
317317
318318 class VariableAndBDD {
319319 int[] var; // bdd nodes
320- // TODO –¼‘O constraint -> ‰½‚©‚æ‚¢‚à‚Ì‚É
320+ // TODO 名前 constraint -> 何かよいものに
321321 int constraint; // bdd for invalid values
322322
323323 VariableAndBDD(int[] var, int constraint) {
--- a/src/main/java/v1/Error.java
+++ b/src/main/java/v1/Error.java
@@ -7,7 +7,7 @@ import java.io.OutputStreamWriter;
77
88 public class Error {
99
10- // default ‚ŃGƒ‰[‚Í•W€o—Í
10+ // default でエラーは標準出力
1111 static String filename = null;
1212
1313 public static void setOutputFile(String filename) {
@@ -24,8 +24,8 @@ public class Error {
2424 writer.write("#ERROR," + str + "\n");
2525 writer.close();
2626 } catch (IOException e) {
27- System.err.print(Main.language == Main.Language.JP ? "o—̓tƒ@ƒCƒ‹"
28- + filename + "‚ªì¬‚Å‚«‚Ü‚¹‚ñD" : "Output file " + filename
27+ System.err.print(Main.language == Main.Language.JP ? "出力ファイル"
28+ + filename + "が作成できません." : "Output file " + filename
2929 + " could not be created.");
3030 }
3131 System.exit(1);
--- a/src/main/java/v1/Generator.java
+++ b/src/main/java/v1/Generator.java
@@ -57,7 +57,7 @@ abstract class Generator {
5757
5858 abstract List<Testcase> generate() throws OutOfMaxNumOfTestcasesException;
5959
60- // group‚Å‘S–Ô—…‚·‚étuple‚Ì—ñ‚𐶐¬
60+ // groupで全網羅するtupleの列を生成
6161 protected List<List<Testcase>> generateTupleSequenceList() {
6262 // protected List<TupleSequence> generateTupleSequence() {
6363 // TODO Auto-generated method stub
@@ -88,7 +88,7 @@ abstract class Generator {
8888 tmptest = tmptest.makeClone();
8989 for (int j = 0; j < g.member.length; j++) {
9090 int p = g.member[j];
91- if (tmptest.get(p) + 1 >= parametermodel.range[p]) // ‚¯‚½‚ ‚°
91+ if (tmptest.get(p) + 1 >= parametermodel.range[p]) // けたあげ
9292 tmptest.set(p, (byte) 0);
9393 else {
9494 tmptest.set(p, (byte) (tmptest.get(p) + 1));
@@ -98,8 +98,8 @@ abstract class Generator {
9898 if (constrainthandler.isPossible(tmptest)) {
9999 testSet.add(tmptest);
100100 if (testSet.size() > MaxNumOfTestcases)
101- Error.printError(Main.language == Main.Language.JP ? "“Á’èˆöŽq‚Ì‘S–Ô—…‚ɏãŒÀ"
102- + MaxNumOfTestcases + "‚ð’´‚¦‚éƒeƒXƒgƒP[ƒX‚ª•K—v‚Å‚·"
101+ Error.printError(Main.language == Main.Language.JP ? "特定因子の全網羅に上限"
102+ + MaxNumOfTestcases + "を超えるテストケースが必要です"
103103 : "The number of test cases exceeds the upper bound "
104104 + MaxNumOfTestcases);
105105 }
@@ -124,7 +124,7 @@ class Generator2 extends Generator {
124124 * ConstraintHandler constrainthandler; final List<Testcase> seed; final int
125125 * numOfParameters; final Random rnd;
126126 *
127- * //TODO group‚̒ljÁ Generator2 (ParameterModel parametermodel, GList
127+ * //TODO groupの追加 Generator2 (ParameterModel parametermodel, GList
128128 * groupList, ConstraintHandler constrainthandler, List<Testcase> seed, long
129129 * randomseed){ this.parametermodel = parametermodel; this.groupList =
130130 * groupList; this.constrainthandler = constrainthandler; this.seed = seed;
@@ -147,13 +147,13 @@ class Generator2 extends Generator {
147147 List<Testcase> res = new ArrayList<Testcase>();
148148 PairTable tab = new PairTable(parametermodel);
149149
150- // group–ˆCtuple—ñ‚̍쐬
150+ // group毎,tuple列の作成
151151 List<List<Testcase>> tupleSequenceList = generateTupleSequenceList();
152152
153153 //
154154 int numOfUncoveredTuples = checkAllTuples(tab);
155155
156- // Še<ˆöŽqE’l> ‚É ‚»‚ꂪŠÜ‚Ü‚ê‚é–¢ƒJƒo[‚Ìtuple‚Ì‘”‚ðÝ’è
156+ // 各<因子・値> に それが含まれる未カバーのtupleの総数を設定
157157 ArrayList<Integer>[] uncovTab = new ArrayList[parametermodel.size];
158158 initializeUncovTab(uncovTab, tab);
159159
@@ -166,7 +166,7 @@ class Generator2 extends Generator {
166166
167167 int seedrownum = 0;
168168 while (numOfUncoveredTuples > 0 || hasTuplesToCover(tupleSequenceList)) {
169- // testcase 1ŒÂ¶¬
169+ // testcase 1個生成
170170 ResultOfGenerateOneTest newresult = generateOneTest(tab,
171171 seedrownum, uncovTab, tupleSequenceList);
172172
@@ -206,7 +206,7 @@ class Generator2 extends Generator {
206206
207207 private void initializeUncovTab(ArrayList<Integer>[] uncovTab, PairTable tab) {
208208 assert (parametermodel.size == uncovTab.length);
209- // uncovTab‚ÌŒvŽZDpair (strength = 2) ‚̏ꍇ
209+ // uncovTabの計算.pair (strength = 2) の場合
210210 for (int p1 = 0; p1 < parametermodel.size; p1++) {
211211 uncovTab[p1] = new ArrayList<Integer>();
212212 for (byte v1 = 0; v1 < parametermodel.range[p1]; v1++) {
@@ -227,7 +227,7 @@ class Generator2 extends Generator {
227227 private ResultOfGenerateOneTest generateOneTest(PairTable tab,
228228 int seedrownum, ArrayList<Integer>[] uncovTab,
229229 List<List<Testcase>> tupleSequenceList) {
230- // ‹ó‚̃eƒXƒgƒP[ƒX‚ð1‚‚‚­‚é
230+ // 空のテストケースを1つつくる
231231 Testcase tmp = new Testcase(parametermodel.size);
232232 tmp.quantify();
233233
@@ -235,7 +235,7 @@ class Generator2 extends Generator {
235235
236236 // debug: System.err.print("seedrownum: " + seedrownum + "-> ");
237237
238- // seed‚̃Rƒs[@§–ñ‚ð–ž‚½‚³‚È‚©‚Á‚½‚çƒGƒ‰[
238+ // seedのコピー 制約を満たさなかったらエラー
239239 if (seed.size() > 0 && seedrownum < seed.size()) {
240240 isSeedUsed = true;
241241 Testcase seedrow = seed.get(seedrownum);
@@ -244,17 +244,17 @@ class Generator2 extends Generator {
244244 }
245245 }
246246 if (constrainthandler.isPossible(tmp) == false) {
247- Error.printError(Main.language == Main.Language.JP ? "seed‚Ì"
248- + (seedrownum + 1) + "s–Ú‚ª§–ñˆá”½‚Å‚·" : "The" + (seedrownum + 1)
247+ Error.printError(Main.language == Main.Language.JP ? "seedの"
248+ + (seedrownum + 1) + "行目が制約違反です" : "The" + (seedrownum + 1)
249249 + "th seeding row violates the constraints.");
250250 return null;
251251 }
252252
253- // TODO tmp‚ɃOƒ‹[ƒv‚ð’ljÁ
253+ // TODO tmpにグループを追加
254254 addGroupedTuples(tmp, tupleSequenceList);
255255
256- // TODO ŒJ‚è•Ô‚³‚¹‚é
257- // generateTempTest ‚Å‚Í tab‚ðXV‚µ‚È‚¢
256+ // TODO 繰り返させる
257+ // generateTempTest では tabを更新しない
258258 Testcase temptest = generateTempTest(tmp, tab, uncovTab);
259259 int count = this.computeNewlyCoveredTuples(tab, temptest);
260260
@@ -273,14 +273,14 @@ class Generator2 extends Generator {
273273
274274 // System.err.println(computeNewlyCoveredTuples(tab, temptest));
275275
276- // ƒJƒo[‚µ‚½ƒyƒA[‚ðŽÀÛ‚ÉuncovTab‚É”½‰f
277- // finalizePairTable‚æ‚è‘O‚Å‚È‚¢‚Æ‚¾‚ß
276+ // カバーしたペアーを実際にuncovTabに反映
277+ // finalizePairTableより前でないとだめ
278278 finallizeUncoverTable(uncovTab, tab, temptest);
279279
280- // ƒJƒo[‚µ‚½ƒyƒA[‚ðŽÀÛ‚Étab‚É”½‰f
280+ // カバーしたペアーを実際にtabに反映
281281 int newtuples = finalizePairTable(tab, temptest);
282282
283- // •Ô‚è’l‚̐ݒè
283+ // 返り値の設定
284284 ResultOfGenerateOneTest res = new ResultOfGenerateOneTest();
285285 res.test = temptest;
286286 res.numOfCoveredTuples = newtuples;
@@ -334,14 +334,14 @@ class Generator2 extends Generator {
334334 private Testcase generateTempTest(Testcase seedrow, PairTable tab,
335335 ArrayList<Integer>[] uncovTab) {
336336
337- // tmp‚ðƒRƒs[
337+ // tmpをコピー
338338 Testcase tmp = seedrow.makeClone();
339339
340- // TODO ƒ‰ƒ“ƒ_ƒ€‚ȈöŽq—ñ‚𐶐¬
340+ // TODO ランダムな因子列を生成
341341 int[] parametersequence = new int[parametermodel.size];
342342 for (int i = 0; i < parametermodel.size; i++)
343343 parametersequence[i] = i;
344- // ƒVƒƒƒbƒtƒ‹
344+ // シャッフル
345345 for (int i = 1; i < parametermodel.size; i++) {
346346 int dst = this.rnd.nextInt(i + 1);
347347 int tmppara = parametersequence[i];
@@ -354,12 +354,12 @@ class Generator2 extends Generator {
354354 * System.out.print(parametersequence[i] + " "); System.out.println();
355355 */
356356
357- // ŠeˆöŽq‚ɂ‚¢‚Ä
357+ // 各因子について
358358 for (int i = 0; i < parametermodel.size; i++) {
359359 int p = parametersequence[i];
360- // ’l‚ª‚«‚Ü‚Á‚Ä‚¢‚È‚¢‚È‚ç
360+ // 値がきまっていないなら
361361 if (tmp.get(p) < 0) {
362- // Še’l‚É‚æ‚Á‚ăJƒo[‚³‚ê‚éƒyƒA‚𐔂¦CÅ‘å‚Ì‚à‚Ì‚ð‘I‘ð
362+ // 各値によってカバーされるペアを数え,最大のものを選択
363363 int newlyCoveredTuples = -1;
364364 byte bestValue = -1;
365365 for (byte v = 0; v < this.parametermodel.range[p]; v++) {
@@ -374,14 +374,14 @@ class Generator2 extends Generator {
374374 }
375375 // assert (bestValue >= 0) : "error in chosing a value";
376376 if (bestValue == -1) {
377- Error.printError(Main.language == Main.Language.JP ? "seed‚ɐ§–ñˆá”½‚̍s‚ª‚ ‚è‚Ü‚·"
377+ Error.printError(Main.language == Main.Language.JP ? "seedに制約違反の行があります"
378378 : "Some seeding row violates the constraints.");
379379
380380 return null;
381381 }
382382 if (newlyCoveredTuples == 0) {
383- // TODO ƒJƒo[” 0 ‚È‚çCŠú‘Ò‚³‚ê‚éƒyƒA”‚𐔂¦CÅ‘å‚Ì‚à‚Ì‚ð‘I‘ð
384- // TODO Šú‘Ò‚·‚éƒyƒA”‚ɂ́Câ‘΂ɂނè‚È‚à‚Ì‚à‚ ‚éi‚·‚Å‚É’l‚ªŒˆ‚Ü‚Á‚Ä‚¢‚éˆöŽq‚Ƃ̃yƒAj
383+ // TODO カバー数 0 なら,期待されるペア数を数え,最大のものを選択
384+ // TODO 期待するペア数には,絶対にむりなものもある(すでに値が決まっている因子とのペア)
385385 bestValue = -1;
386386 int possibleTuples = -1;
387387
@@ -401,7 +401,7 @@ class Generator2 extends Generator {
401401 candidateValues.add(v);
402402 }
403403 }
404- // ‚Ç‚ê‚ð‘I‚ñ‚Å‚à“¯‚¶‚È‚çCƒ‰ƒ“ƒ_ƒ€‚É‘I‚Ô
404+ // どれを選んでも同じなら,ランダムに選ぶ
405405 // for tie breaking
406406 if (possibleTuples == 0)
407407 bestValue = candidateValues.get(this.rnd
@@ -411,7 +411,7 @@ class Generator2 extends Generator {
411411 }
412412 }
413413
414- // VƒJƒo[‚ª0‚Æ‚¢‚¤‚±‚Æ‚à‚ ‚é
414+ // 新カバーが0ということもある
415415 return tmp;
416416 }
417417
@@ -455,13 +455,13 @@ class Generator2 extends Generator {
455455 for (int j = i + 1; j < numOfParameters; j++) {
456456 for (byte v1 = 0; v1 < parametermodel.range[i]; v1++)
457457 for (byte v2 = 0; v2 < parametermodel.range[j]; v2++) {
458- // pair‚̐¶¬
458+ // pairの生成
459459 Testcase pair = new Testcase(numOfParameters);
460460 pair.quantify();
461461 pair.set(i, v1);
462462 pair.set(j, v2);
463- // pair‚̃`ƒFƒbƒN
464- // ‹Ö‘¥ˆá”½‚È‚çset
463+ // pairのチェック
464+ // 禁則違反ならset
465465 if (constrainthandler.isPossible(pair) == false) {
466466 tab.set(i, v1, j, v2);
467467 } else
@@ -510,7 +510,7 @@ class PairTable extends TupleTable {
510510 table[i][j] = new PairList(parametermodel.range[i],
511511 parametermodel.range[j]);
512512 else if (i > j) {
513- // TODO: ƒGƒ‰[‚ª‚Å‚éH‚È‚ñ‚ŁH
513+ // TODO: エラーがでる?なんで?
514514 // table[i][j].list = table[j][i].list.clone();
515515 }
516516
@@ -539,7 +539,7 @@ class PairTable extends TupleTable {
539539 return this.table[p1][p2].list[v1 + v2 * (parametermodel.range[p1])];
540540 }
541541
542- // Œ»‚ê‚È‚¢ê‡D‚·‚łɃJƒo[‚µ‚½ê‡
542+ // 現れない場合.すでにカバーした場合
543543 void set(int p1, byte v1, int p2, byte v2) {
544544 if (p2 < p1) {
545545 int tmp = p1;
--- a/src/main/java/v1/Generator3.java
+++ b/src/main/java/v1/Generator3.java
@@ -19,19 +19,19 @@ class Generator3 extends Generator {
1919 List<Testcase> res = new ArrayList<Testcase>();
2020 TripleTable tab = new TripleTable(parametermodel);
2121
22- // group–ˆCtuple—ñ‚̍쐬
22+ // group毎,tuple列の作成
2323 List<List<Testcase>> tupleSequenceList = generateTupleSequenceList();
2424
2525 //
2626 int numOfUncoveredTuples = checkAllTuples(tab);
2727
28- // Še<ˆöŽqE’l> ‚É ‚»‚ꂪŠÜ‚Ü‚ê‚é–¢ƒJƒo[‚Ìtuple‚Ì‘”‚ðÝ’è
28+ // 各<因子・値> に それが含まれる未カバーのtupleの総数を設定
2929 ArrayList<Integer>[] uncovTab = new ArrayList[parametermodel.size];
3030 initializeUncovTab(uncovTab, tab);
3131
3232 int seedrownum = 0;
3333 while (numOfUncoveredTuples > 0 || hasTuplesToCover(tupleSequenceList)) {
34- // testcase 1ŒÂ¶¬
34+ // testcase 1個生成
3535 ResultOfGenerateOneTest newresult = generateOneTest(tab,
3636 seedrownum, uncovTab, tupleSequenceList);
3737
@@ -55,14 +55,14 @@ class Generator3 extends Generator {
5555 for (byte v2 = 0; v2 < parametermodel.range[j]; v2++)
5656 for (byte v3 = 0; v3 < parametermodel.range[k]; v3++) {
5757 assert (i < j && j < k);
58- // triple‚̐¶¬
58+ // tripleの生成
5959 Testcase triple = new Testcase(numOfParameters);
6060 triple.quantify();
6161 triple.set(i, v1);
6262 triple.set(j, v2);
6363 triple.set(k, v3);
64- // pair‚̃`ƒFƒbƒN
65- // ‹Ö‘¥ˆá”½‚È‚çset
64+ // pairのチェック
65+ // 禁則違反ならset
6666 if (constrainthandler.isPossible(triple) == false) {
6767 tab.set(i, v1, j, v2, k, v3);
6868 } else
@@ -77,7 +77,7 @@ class Generator3 extends Generator {
7777 private void initializeUncovTab(ArrayList<Integer>[] uncovTab,
7878 TripleTable tab) {
7979 assert (parametermodel.size == uncovTab.length);
80- // uncovTab‚ÌŒvŽZDtriple (strength = 3) ‚̏ꍇ
80+ // uncovTabの計算.triple (strength = 3) の場合
8181 for (int p = 0; p < parametermodel.size; p++) {
8282 uncovTab[p] = new ArrayList<Integer>();
8383 for (byte v = 0; v < parametermodel.range[p]; v++) {
@@ -102,12 +102,12 @@ class Generator3 extends Generator {
102102 private ResultOfGenerateOneTest generateOneTest(TripleTable tab,
103103 int seedrownum, ArrayList<Integer>[] uncovTab,
104104 List<List<Testcase>> tupleSequenceList) {
105- // ‹ó‚̃eƒXƒgƒP[ƒX‚ð1‚‚‚­‚é
105+ // 空のテストケースを1つつくる
106106 Testcase tmp = new Testcase(parametermodel.size);
107107 tmp.quantify();
108108
109109 boolean isSeedUsed = false;
110- // seed‚̃Rƒs[@§–ñ‚ð–ž‚½‚³‚È‚©‚Á‚½‚çƒGƒ‰[
110+ // seedのコピー 制約を満たさなかったらエラー
111111 if (seed.size() > 0 && seedrownum < seed.size()) {
112112 isSeedUsed = true;
113113 Testcase seedrow = seed.get(seedrownum);
@@ -116,36 +116,36 @@ class Generator3 extends Generator {
116116 }
117117 }
118118 if (constrainthandler.isPossible(tmp) == false) {
119- Error.printError(Main.language == Main.Language.JP ? "seed‚Ì"
120- + (seedrownum + 1) + "s–Ú‚ª§–ñˆá”½‚Å‚·" : "The" + (seedrownum + 1)
119+ Error.printError(Main.language == Main.Language.JP ? "seedの"
120+ + (seedrownum + 1) + "行目が制約違反です" : "The" + (seedrownum + 1)
121121 + "th seeding row violates the constraints.");
122122
123123 return null;
124124 }
125125
126126 // 2.20
127- // tmp‚ɃOƒ‹[ƒv‚ð’ljÁ
127+ // tmpにグループを追加
128128 boolean isGroupUsed = addGroupedTuples(tmp, tupleSequenceList);
129129
130- // TODO ŒJ‚è•Ô‚³‚¹‚é
131- // generateTempTest ‚Å‚Í tab‚ðXV‚µ‚È‚¢
130+ // TODO 繰り返させる
131+ // generateTempTest では tabを更新しない
132132 Testcase temptest = generateTempTest(tmp, tab, uncovTab);
133133 // 2.20
134- // 0ƒJƒo[‚̏ꍇ
134+ // 0カバーの場合
135135 if (isSeedUsed == false && isGroupUsed == false
136136 && computeNewlyCoveredTuples(tab, temptest) == 0) {
137137 addUncoveredTuple(tmp, tab, uncovTab);
138138 temptest = generateTempTest(tmp, tab, uncovTab);
139139 }
140140
141- // ƒJƒo[‚µ‚½ƒyƒA[‚ðŽÀÛ‚ÉuncovTab‚É”½‰f
142- // finalizePairTable‚æ‚è‘O‚Å‚È‚¢‚Æ‚¾‚ß
141+ // カバーしたペアーを実際にuncovTabに反映
142+ // finalizePairTableより前でないとだめ
143143 finallizeUncoverTable(uncovTab, tab, temptest);
144144
145- // ƒJƒo[‚µ‚½ƒyƒA[‚ðŽÀÛ‚Étab‚É”½‰f
145+ // カバーしたペアーを実際にtabに反映
146146 int newtuples = finalizeTupleTable(tab, temptest);
147147
148- // •Ô‚è’l‚̐ݒè
148+ // 返り値の設定
149149 ResultOfGenerateOneTest res = new ResultOfGenerateOneTest();
150150 res.test = temptest;
151151 res.numOfCoveredTuples = newtuples;
@@ -203,7 +203,7 @@ class Generator3 extends Generator {
203203 }
204204
205205 // 2.20
206- // ‘O‚̈ʒu‚ð‚¨‚Ú‚¦‚Ä‚¨‚­
206+ // 前の位置をおぼえておく
207207 private void addUncoveredTuple(Testcase tmp, TripleTable tab,
208208 ArrayList<Integer>[] uncovTab) {
209209
@@ -248,14 +248,14 @@ class Generator3 extends Generator {
248248 private Testcase generateTempTest(Testcase seedrow, TripleTable tab,
249249 ArrayList<Integer>[] uncovTab) {
250250
251- // tmp‚ðƒRƒs[
251+ // tmpをコピー
252252 Testcase tmp = seedrow.makeClone();
253253
254- // TODO ƒ‰ƒ“ƒ_ƒ€‚ȈöŽq—ñ‚𐶐¬
254+ // TODO ランダムな因子列を生成
255255 int[] parametersequence = new int[parametermodel.size];
256256 for (int i = 0; i < parametermodel.size; i++)
257257 parametersequence[i] = i;
258- // ƒVƒƒƒbƒtƒ‹
258+ // シャッフル
259259 for (int i = 1; i < parametermodel.size; i++) {
260260 int dst = this.rnd.nextInt(i + 1);
261261 int tmppara = parametersequence[i];
@@ -263,12 +263,12 @@ class Generator3 extends Generator {
263263 parametersequence[dst] = tmppara;
264264 }
265265
266- // ŠeˆöŽq‚ɂ‚¢‚Ä
266+ // 各因子について
267267 for (int i = 0; i < parametermodel.size; i++) {
268268 int p = parametersequence[i];
269- // ’l‚ª‚«‚Ü‚Á‚Ä‚¢‚È‚¢‚È‚ç
269+ // 値がきまっていないなら
270270 if (tmp.get(p) < 0) {
271- // Še’l‚É‚æ‚Á‚ăJƒo[‚³‚ê‚éƒyƒA‚𐔂¦CÅ‘å‚Ì‚à‚Ì‚ð‘I‘ð
271+ // 各値によってカバーされるペアを数え,最大のものを選択
272272 int newlyCoveredTuples = -1;
273273 byte bestValue = -1;
274274 for (byte v = 0; v < this.parametermodel.range[p]; v++) {
@@ -283,13 +283,13 @@ class Generator3 extends Generator {
283283 }
284284 // assert (bestValue >= 0) : "error in chosing a value";
285285 if (bestValue == -1) {
286- Error.printError(Main.language == Main.Language.JP ? "seed‚ɐ§–ñˆá”½‚̍s‚ª‚ ‚è‚Ü‚·"
286+ Error.printError(Main.language == Main.Language.JP ? "seedに制約違反の行があります"
287287 : "Some seeding row violates the constraints.");
288288 return null;
289289 }
290290 if (newlyCoveredTuples == 0) {
291- // TODO ƒJƒo[” 0 ‚È‚çCŠú‘Ò‚³‚ê‚éƒyƒA”‚𐔂¦CÅ‘å‚Ì‚à‚Ì‚ð‘I‘ð
292- // TODO Šú‘Ò‚·‚éƒyƒA”‚ɂ́Câ‘΂ɂނè‚È‚à‚Ì‚à‚ ‚éi‚·‚Å‚É’l‚ªŒˆ‚Ü‚Á‚Ä‚¢‚éˆöŽq‚Ƃ̃yƒAj
291+ // TODO カバー数 0 なら,期待されるペア数を数え,最大のものを選択
292+ // TODO 期待するペア数には,絶対にむりなものもある(すでに値が決まっている因子とのペア)
293293 bestValue = -1;
294294 int possibleTuples = -1;
295295 // for tie breaking
@@ -308,7 +308,7 @@ class Generator3 extends Generator {
308308 candidateValues.add(v);
309309 }
310310 }
311- // ‚Ç‚ê‚ð‘I‚ñ‚Å‚à“¯‚¶‚È‚çCƒ‰ƒ“ƒ_ƒ€‚É‘I‚Ô
311+ // どれを選んでも同じなら,ランダムに選ぶ
312312 // for tie breaking
313313 if (possibleTuples == 0)
314314 bestValue = candidateValues.get(this.rnd
@@ -318,7 +318,7 @@ class Generator3 extends Generator {
318318 }
319319 }
320320
321- // VƒJƒo[‚ª0‚Æ‚¢‚¤‚±‚Æ‚à‚ ‚é
321+ // 新カバーが0ということもある
322322 return tmp;
323323 }
324324
@@ -373,7 +373,7 @@ class TripleTable extends TupleTable {
373373 parametermodel.range[j],
374374 parametermodel.range[k]);
375375 else if (i > j) {
376- // TODO: ƒGƒ‰[‚ª‚Å‚éH‚È‚ñ‚ŁH
376+ // TODO: エラーがでる?なんで?
377377 // table[i][j].list = table[j][i].list.clone();
378378 }
379379 }
@@ -384,8 +384,8 @@ class TripleTable extends TupleTable {
384384 // requires p1 != p2 != p3
385385 boolean get(int p1, byte v1, int p2, byte v2, int p3, byte v3) {
386386 // TODO Auto-generated method stub
387- // pair‚̏ꍇ‚É‚à”½‰fH
388- // ˆöŽq‚̏¸‡‚Ƀ\[ƒg
387+ // pairの場合にも反映?
388+ // 因子の昇順にソート
389389 ParameterValuePair[] pv = new ParameterValuePair[3];
390390 pv[0] = new ParameterValuePair(p1, v1);
391391 pv[1] = new ParameterValuePair(p2, v2);
@@ -398,7 +398,7 @@ class TripleTable extends TupleTable {
398398
399399 }
400400
401- // Œ»‚ê‚È‚¢ê‡D‚·‚łɃJƒo[‚µ‚½ê‡
401+ // 現れない場合.すでにカバーした場合
402402 // requires p1 != p2 != p3
403403 void set(int p1, byte v1, int p2, byte v2, int p3, byte v3) {
404404 ParameterValuePair[] pv = new ParameterValuePair[3];
--- a/src/main/java/v1/Generator4.java
+++ b/src/main/java/v1/Generator4.java
@@ -18,19 +18,19 @@ class Generator4 extends Generator {
1818 List<Testcase> res = new ArrayList<Testcase>();
1919 QuadTable tab = new QuadTable(parametermodel);
2020
21- // group–ˆCtuple—ñ‚̍쐬
21+ // group毎,tuple列の作成
2222 List<List<Testcase>> tupleSequenceList = generateTupleSequenceList();
2323
2424 //
2525 int numOfUncoveredTuples = checkAllTuples(tab);
2626
27- // Še<ˆöŽqE’l> ‚É ‚»‚ꂪŠÜ‚Ü‚ê‚é–¢ƒJƒo[‚Ìtuple‚Ì‘”‚ðÝ’è
27+ // 各<因子・値> に それが含まれる未カバーのtupleの総数を設定
2828 ArrayList<Integer>[] uncovTab = new ArrayList[parametermodel.size];
2929 initializeUncovTab(uncovTab, tab);
3030
3131 int seedrownum = 0;
3232 while (numOfUncoveredTuples > 0 || hasTuplesToCover(tupleSequenceList)) {
33- // testcase 1ŒÂ¶¬
33+ // testcase 1個生成
3434 ResultOfGenerateOneTest newresult = generateOneTest(tab,
3535 seedrownum, uncovTab, tupleSequenceList);
3636
@@ -55,7 +55,7 @@ class Generator4 extends Generator {
5555 for (byte v1 = 0; v1 < parametermodel.range[p1]; v1++) {
5656 for (byte v2 = 0; v2 < parametermodel.range[p2]; v2++) {
5757 for (byte v3 = 0; v3 < parametermodel.range[p3]; v3++) {
58- // tuple‚̐¶¬
58+ // tupleの生成
5959 Testcase tuple = new Testcase(
6060 numOfParameters);
6161 tuple.quantify();
@@ -63,8 +63,8 @@ class Generator4 extends Generator {
6363 tuple.set(p1, v1);
6464 tuple.set(p2, v2);
6565 tuple.set(p3, v3);
66- // tuple‚̃`ƒFƒbƒN
67- // ‹Ö‘¥ˆá”½‚È‚çset
66+ // tupleのチェック
67+ // 禁則違反ならset
6868 if (constrainthandler.isPossible(tuple) == false) {
6969 tab.set(p0, v0, p1, v1, p2, v2, p3,
7070 v3);
@@ -83,7 +83,7 @@ class Generator4 extends Generator {
8383
8484 private void initializeUncovTab(ArrayList<Integer>[] uncovTab, QuadTable tab) {
8585 assert (parametermodel.size == uncovTab.length);
86- // uncovTab‚ÌŒvŽZD strength = 4 ‚̏ꍇ
86+ // uncovTabの計算. strength = 4 の場合
8787 for (int p = 0; p < parametermodel.size; p++) {
8888 uncovTab[p] = new ArrayList<Integer>();
8989 for (byte v = 0; v < parametermodel.range[p]; v++) {
@@ -115,13 +115,13 @@ class Generator4 extends Generator {
115115 private ResultOfGenerateOneTest generateOneTest(QuadTable tab,
116116 int seedrownum, ArrayList<Integer>[] uncovTab,
117117 List<List<Testcase>> tupleSequenceList) {
118- // ‹ó‚̃eƒXƒgƒP[ƒX‚ð1‚‚‚­‚é
118+ // 空のテストケースを1つつくる
119119 Testcase tmp = new Testcase(parametermodel.size);
120120 tmp.quantify();
121121
122122 boolean isSeedUsed = false;
123123
124- // seed‚̃Rƒs[@§–ñ‚ð–ž‚½‚³‚È‚©‚Á‚½‚çƒGƒ‰[
124+ // seedのコピー 制約を満たさなかったらエラー
125125 if (seed.size() > 0 && seedrownum < seed.size()) {
126126 isSeedUsed = true;
127127 Testcase seedrow = seed.get(seedrownum);
@@ -130,35 +130,35 @@ class Generator4 extends Generator {
130130 }
131131 }
132132 if (constrainthandler.isPossible(tmp) == false) {
133- Error.printError(Main.language == Main.Language.JP ? "seed‚Ì"
134- + (seedrownum + 1) + "s–Ú‚ª§–ñˆá”½‚Å‚·" : "The" + (seedrownum + 1)
133+ Error.printError(Main.language == Main.Language.JP ? "seedの"
134+ + (seedrownum + 1) + "行目が制約違反です" : "The" + (seedrownum + 1)
135135 + "th seeding row violates the constraints.");
136136 return null;
137137 }
138138
139- // tmp‚ɃOƒ‹[ƒv‚ð’ljÁ
139+ // tmpにグループを追加
140140 // 2.20
141141 boolean isGroupUsed = addGroupedTuples(tmp, tupleSequenceList);
142142
143- // TODO ŒJ‚è•Ô‚³‚¹‚é
144- // generateTempTest ‚Å‚Í tab‚ðXV‚µ‚È‚¢
143+ // TODO 繰り返させる
144+ // generateTempTest では tabを更新しない
145145 Testcase temptest = generateTempTest(tmp, tab, uncovTab);
146146 // 2.20
147- // 0ƒJƒo[‚̏ꍇ
147+ // 0カバーの場合
148148 if (isSeedUsed == false && isGroupUsed == false
149149 && computeNewlyCoveredTuples(tab, temptest) == 0) {
150150 addUncoveredTuple(tmp, tab, uncovTab);
151151 temptest = generateTempTest(tmp, tab, uncovTab);
152152 }
153153
154- // ƒJƒo[‚µ‚½ƒyƒA[‚ðŽÀÛ‚ÉuncovTab‚É”½‰f
155- // finalizePairTable‚æ‚è‘O‚Å‚È‚¢‚Æ‚¾‚ß
154+ // カバーしたペアーを実際にuncovTabに反映
155+ // finalizePairTableより前でないとだめ
156156 finallizeUncoverTable(uncovTab, tab, temptest);
157157
158- // ƒJƒo[‚µ‚½ƒyƒA[‚ðŽÀÛ‚Étab‚É”½‰f
158+ // カバーしたペアーを実際にtabに反映
159159 int newtuples = finalizeTupleTable(tab, temptest);
160160
161- // •Ô‚è’l‚̐ݒè
161+ // 返り値の設定
162162 ResultOfGenerateOneTest res = new ResultOfGenerateOneTest();
163163 res.test = temptest;
164164 res.numOfCoveredTuples = newtuples;
@@ -223,7 +223,7 @@ class Generator4 extends Generator {
223223 }
224224
225225 // 2.20
226- // ‘O‚̈ʒu‚ð‚¨‚Ú‚¦‚Ä‚¨‚­
226+ // 前の位置をおぼえておく
227227 private void addUncoveredTuple(Testcase tmp, QuadTable tab,
228228 ArrayList<Integer>[] uncovTab) {
229229 for (int p0 = 0; p0 < numOfParameters - 3; p0++)
@@ -275,14 +275,14 @@ class Generator4 extends Generator {
275275 private Testcase generateTempTest(Testcase seedrow, QuadTable tab,
276276 ArrayList<Integer>[] uncovTab) {
277277
278- // tmp‚ðƒRƒs[
278+ // tmpをコピー
279279 Testcase tmp = seedrow.makeClone();
280280
281- // TODO ƒ‰ƒ“ƒ_ƒ€‚ȈöŽq—ñ‚𐶐¬
281+ // TODO ランダムな因子列を生成
282282 int[] parametersequence = new int[parametermodel.size];
283283 for (int i = 0; i < parametermodel.size; i++)
284284 parametersequence[i] = i;
285- // ƒVƒƒƒbƒtƒ‹
285+ // シャッフル
286286 for (int i = 1; i < parametermodel.size; i++) {
287287 int dst = this.rnd.nextInt(i + 1);
288288 int tmppara = parametersequence[i];
@@ -290,12 +290,12 @@ class Generator4 extends Generator {
290290 parametersequence[dst] = tmppara;
291291 }
292292
293- // ŠeˆöŽq‚ɂ‚¢‚Ä
293+ // 各因子について
294294 for (int i = 0; i < parametermodel.size; i++) {
295295 int p = parametersequence[i];
296- // ’l‚ª‚«‚Ü‚Á‚Ä‚¢‚È‚¢‚È‚ç
296+ // 値がきまっていないなら
297297 if (tmp.get(p) < 0) {
298- // Še’l‚É‚æ‚Á‚ăJƒo[‚³‚ê‚éƒyƒA‚𐔂¦CÅ‘å‚Ì‚à‚Ì‚ð‘I‘ð
298+ // 各値によってカバーされるペアを数え,最大のものを選択
299299 int newlyCoveredTuples = -1;
300300 byte bestValue = -1;
301301 for (byte v = 0; v < this.parametermodel.range[p]; v++) {
@@ -309,13 +309,13 @@ class Generator4 extends Generator {
309309 }
310310 }
311311 if (bestValue == -1) {
312- Error.printError(Main.language == Main.Language.JP ? "seed‚ɐ§–ñˆá”½‚̍s‚ª‚ ‚è‚Ü‚·"
312+ Error.printError(Main.language == Main.Language.JP ? "seedに制約違反の行があります"
313313 : "Some seeding row violates the constraints.");
314314 return null;
315315 }
316316 if (newlyCoveredTuples == 0) {
317- // TODO ƒJƒo[” 0 ‚È‚çCŠú‘Ò‚³‚ê‚éƒyƒA”‚𐔂¦CÅ‘å‚Ì‚à‚Ì‚ð‘I‘ð
318- // TODO Šú‘Ò‚·‚éƒyƒA”‚ɂ́Câ‘΂ɂނè‚È‚à‚Ì‚à‚ ‚éi‚·‚Å‚É’l‚ªŒˆ‚Ü‚Á‚Ä‚¢‚éˆöŽq‚Ƃ̃yƒAj
317+ // TODO カバー数 0 なら,期待されるペア数を数え,最大のものを選択
318+ // TODO 期待するペア数には,絶対にむりなものもある(すでに値が決まっている因子とのペア)
319319 bestValue = -1;
320320 int possibleTuples = -1;
321321 // for tie breaking
@@ -334,7 +334,7 @@ class Generator4 extends Generator {
334334 candidateValues.add(v);
335335 }
336336 }
337- // ‚Ç‚ê‚ð‘I‚ñ‚Å‚à“¯‚¶‚È‚çCƒ‰ƒ“ƒ_ƒ€‚É‘I‚Ô
337+ // どれを選んでも同じなら,ランダムに選ぶ
338338 // for tie breaking
339339 if (possibleTuples == 0)
340340 bestValue = candidateValues.get(this.rnd
@@ -344,7 +344,7 @@ class Generator4 extends Generator {
344344 }
345345 }
346346
347- // VƒJƒo[‚ª0‚Æ‚¢‚¤‚±‚Æ‚à‚ ‚é
347+ // 新カバーが0ということもある
348348 return tmp;
349349 }
350350
@@ -415,8 +415,8 @@ class QuadTable extends TupleTable {
415415 // requires p1 != p2 != p3 != p4
416416 boolean get(int p1, byte v1, int p2, byte v2, int p3, byte v3, int p4,
417417 byte v4) {
418- // pair‚̏ꍇ‚É‚à”½‰fH
419- // ˆöŽq‚̏¸‡‚Ƀ\[ƒg
418+ // pairの場合にも反映?
419+ // 因子の昇順にソート
420420 ParameterValuePair[] pv = new ParameterValuePair[4];
421421 pv[0] = new ParameterValuePair(p1, v1);
422422 pv[1] = new ParameterValuePair(p2, v2);
@@ -427,7 +427,7 @@ class QuadTable extends TupleTable {
427427 return this.table[pv[0].p][pv[1].p][pv[2].p][pv[3].p].list[getOffset(pv)];
428428 }
429429
430- // Œ»‚ê‚È‚¢ê‡D‚·‚łɃJƒo[‚µ‚½ê‡
430+ // 現れない場合.すでにカバーした場合
431431 // requires p1 != p2 != p3 != p4
432432 void set(int p1, byte v1, int p2, byte v2, int p3, byte v3, int p4, byte v4) {
433433 ParameterValuePair[] pv = new ParameterValuePair[4];
--- a/src/main/java/v1/Generator5.java
+++ b/src/main/java/v1/Generator5.java
@@ -16,22 +16,22 @@ class Generator5 extends Generator {
1616 List<Testcase> generate() throws OutOfMaxNumOfTestcasesException {
1717
1818 List<Testcase> res = new ArrayList<Testcase>();
19- // TODO: ƒeƒXƒg”‚̉ºŒÀŒ©Ï‚à‚è if > ãŒÀ then@ƒGƒ‰[
19+ // TODO: テスト数の下限見積もり if > 上限 then エラー
2020 QuintTable tab = new QuintTable(parametermodel);
2121
22- // group–ˆCtuple—ñ‚̍쐬
22+ // group毎,tuple列の作成
2323 List<List<Testcase>> tupleSequenceList = generateTupleSequenceList();
2424
2525 //
2626 int numOfUncoveredTuples = checkAllTuples(tab);
2727
28- // Še<ˆöŽqE’l> ‚É ‚»‚ꂪŠÜ‚Ü‚ê‚é–¢ƒJƒo[‚Ìtuple‚Ì‘”‚ðÝ’è
28+ // 各<因子・値> に それが含まれる未カバーのtupleの総数を設定
2929 ArrayList<Integer>[] uncovTab = new ArrayList[parametermodel.size];
3030 initializeUncovTab(uncovTab, tab);
3131
3232 int seedrownum = 0;
3333 while (numOfUncoveredTuples > 0 || hasTuplesToCover(tupleSequenceList)) {
34- // testcase 1ŒÂ¶¬
34+ // testcase 1個生成
3535 ResultOfGenerateOneTest newresult = generateOneTest(tab,
3636 seedrownum, uncovTab, tupleSequenceList);
3737
@@ -59,7 +59,7 @@ class Generator5 extends Generator {
5959 for (byte v2 = 0; v2 < parametermodel.range[p2]; v2++) {
6060 for (byte v3 = 0; v3 < parametermodel.range[p3]; v3++) {
6161 for (byte v4 = 0; v4 < parametermodel.range[p4]; v4++) {
62- // tuple‚̐¶¬
62+ // tupleの生成
6363 Testcase tuple = new Testcase(
6464 numOfParameters);
6565 tuple.quantify();
@@ -68,8 +68,8 @@ class Generator5 extends Generator {
6868 tuple.set(p2, v2);
6969 tuple.set(p3, v3);
7070 tuple.set(p4, v4);
71- // tuple‚̃`ƒFƒbƒN
72- // ‹Ö‘¥ˆá”½‚È‚çset
71+ // tupleのチェック
72+ // 禁則違反ならset
7373 if (constrainthandler
7474 .isPossible(tuple) == false) {
7575 tab.set(p0, v0, p1, v1, p2,
@@ -92,7 +92,7 @@ class Generator5 extends Generator {
9292 private void initializeUncovTab(ArrayList<Integer>[] uncovTab,
9393 QuintTable tab) {
9494 assert (parametermodel.size == uncovTab.length);
95- // uncovTab‚ÌŒvŽZD strength = 5 ‚̏ꍇ
95+ // uncovTabの計算. strength = 5 の場合
9696 for (int p = 0; p < parametermodel.size; p++) {
9797 uncovTab[p] = new ArrayList<Integer>();
9898 for (byte v = 0; v < parametermodel.range[p]; v++) {
@@ -128,13 +128,13 @@ class Generator5 extends Generator {
128128 private ResultOfGenerateOneTest generateOneTest(QuintTable tab,
129129 int seedrownum, ArrayList<Integer>[] uncovTab,
130130 List<List<Testcase>> tupleSequenceList) {
131- // ‹ó‚̃eƒXƒgƒP[ƒX‚ð1‚‚‚­‚é
131+ // 空のテストケースを1つつくる
132132 Testcase tmp = new Testcase(parametermodel.size);
133133 tmp.quantify();
134134
135135 boolean isSeedUsed = false;
136136
137- // seed‚̃Rƒs[@§–ñ‚ð–ž‚½‚³‚È‚©‚Á‚½‚çƒGƒ‰[
137+ // seedのコピー 制約を満たさなかったらエラー
138138 if (seed.size() > 0 && seedrownum < seed.size()) {
139139 isSeedUsed = true;
140140 Testcase seedrow = seed.get(seedrownum);
@@ -143,36 +143,36 @@ class Generator5 extends Generator {
143143 }
144144 }
145145 if (constrainthandler.isPossible(tmp) == false) {
146- Error.printError(Main.language == Main.Language.JP ? "seed‚Ì"
147- + (seedrownum + 1) + "s–Ú‚ª§–ñˆá”½‚Å‚·" : "The" + (seedrownum + 1)
146+ Error.printError(Main.language == Main.Language.JP ? "seedの"
147+ + (seedrownum + 1) + "行目が制約違反です" : "The" + (seedrownum + 1)
148148 + "th seeding row violates the constraints.");
149149
150150 return null;
151151 }
152152
153- // tmp‚ɃOƒ‹[ƒv‚ð’ljÁ
153+ // tmpにグループを追加
154154 // 2.20
155155 boolean isGroupUsed = addGroupedTuples(tmp, tupleSequenceList);
156156
157- // TODO ŒJ‚è•Ô‚³‚¹‚é
158- // generateTempTest ‚Å‚Í tab‚ðXV‚µ‚È‚¢
157+ // TODO 繰り返させる
158+ // generateTempTest では tabを更新しない
159159 Testcase temptest = generateTempTest(tmp, tab, uncovTab);
160160 // 2.20
161- // 0ƒJƒo[‚̏ꍇ
161+ // 0カバーの場合
162162 if (isSeedUsed == false && isGroupUsed == false
163163 && computeNewlyCoveredTuples(tab, temptest) == 0) {
164164 addUncoveredTuple(tmp, tab, uncovTab);
165165 temptest = generateTempTest(tmp, tab, uncovTab);
166166 }
167167
168- // ƒJƒo[‚µ‚½ƒyƒA[‚ðŽÀÛ‚ÉuncovTab‚É”½‰f
169- // finalizePairTable‚æ‚è‘O‚Å‚È‚¢‚Æ‚¾‚ß
168+ // カバーしたペアーを実際にuncovTabに反映
169+ // finalizePairTableより前でないとだめ
170170 finallizeUncoverTable(uncovTab, tab, temptest);
171171
172- // ƒJƒo[‚µ‚½ƒyƒA[‚ðŽÀÛ‚Étab‚É”½‰f
172+ // カバーしたペアーを実際にtabに反映
173173 int newtuples = finalizeTupleTable(tab, temptest);
174174
175- // •Ô‚è’l‚̐ݒè
175+ // 返り値の設定
176176 ResultOfGenerateOneTest res = new ResultOfGenerateOneTest();
177177 res.test = temptest;
178178 res.numOfCoveredTuples = newtuples;
@@ -246,7 +246,7 @@ class Generator5 extends Generator {
246246 }
247247
248248 // 2.20
249- // ‘O‚̈ʒu‚ð‚¨‚Ú‚¦‚Ä‚¨‚­
249+ // 前の位置をおぼえておく
250250 private void addUncoveredTuple(Testcase tmp, QuintTable tab,
251251 ArrayList<Integer>[] uncovTab) {
252252 for (int p0 = 0; p0 < numOfParameters - 4; p0++)
@@ -304,14 +304,14 @@ class Generator5 extends Generator {
304304 private Testcase generateTempTest(Testcase seedrow, QuintTable tab,
305305 ArrayList<Integer>[] uncovTab) {
306306
307- // tmp‚ðƒRƒs[
307+ // tmpをコピー
308308 Testcase tmp = seedrow.makeClone();
309309
310- // TODO ƒ‰ƒ“ƒ_ƒ€‚ȈöŽq—ñ‚𐶐¬
310+ // TODO ランダムな因子列を生成
311311 int[] parametersequence = new int[parametermodel.size];
312312 for (int i = 0; i < parametermodel.size; i++)
313313 parametersequence[i] = i;
314- // ƒVƒƒƒbƒtƒ‹
314+ // シャッフル
315315 for (int i = 1; i < parametermodel.size; i++) {
316316 int dst = this.rnd.nextInt(i + 1);
317317 int tmppara = parametersequence[i];
@@ -319,12 +319,12 @@ class Generator5 extends Generator {
319319 parametersequence[dst] = tmppara;
320320 }
321321
322- // ŠeˆöŽq‚ɂ‚¢‚Ä
322+ // 各因子について
323323 for (int i = 0; i < parametermodel.size; i++) {
324324 int p = parametersequence[i];
325- // ’l‚ª‚«‚Ü‚Á‚Ä‚¢‚È‚¢‚È‚ç
325+ // 値がきまっていないなら
326326 if (tmp.get(p) < 0) {
327- // Še’l‚É‚æ‚Á‚ăJƒo[‚³‚ê‚éƒyƒA‚𐔂¦CÅ‘å‚Ì‚à‚Ì‚ð‘I‘ð
327+ // 各値によってカバーされるペアを数え,最大のものを選択
328328 int newlyCoveredTuples = -1;
329329 byte bestValue = -1;
330330 for (byte v = 0; v < this.parametermodel.range[p]; v++) {
@@ -338,13 +338,13 @@ class Generator5 extends Generator {
338338 }
339339 }
340340 if (bestValue == -1) {
341- Error.printError(Main.language == Main.Language.JP ? "seed‚ɐ§–ñˆá”½‚̍s‚ª‚ ‚è‚Ü‚·"
341+ Error.printError(Main.language == Main.Language.JP ? "seedに制約違反の行があります"
342342 : "Some seeding row violates the constraints.");
343343 return null;
344344 }
345345 if (newlyCoveredTuples == 0) {
346- // TODO ƒJƒo[” 0 ‚È‚çCŠú‘Ò‚³‚ê‚éƒyƒA”‚𐔂¦CÅ‘å‚Ì‚à‚Ì‚ð‘I‘ð
347- // TODO Šú‘Ò‚·‚éƒyƒA”‚ɂ́Câ‘΂ɂނè‚È‚à‚Ì‚à‚ ‚éi‚·‚Å‚É’l‚ªŒˆ‚Ü‚Á‚Ä‚¢‚éˆöŽq‚Ƃ̃yƒAj
346+ // TODO カバー数 0 なら,期待されるペア数を数え,最大のものを選択
347+ // TODO 期待するペア数には,絶対にむりなものもある(すでに値が決まっている因子とのペア)
348348 bestValue = -1;
349349 int possibleTuples = -1;
350350 // for tie breaking
@@ -363,7 +363,7 @@ class Generator5 extends Generator {
363363 candidateValues.add(v);
364364 }
365365 }
366- // ‚Ç‚ê‚ð‘I‚ñ‚Å‚à“¯‚¶‚È‚çCƒ‰ƒ“ƒ_ƒ€‚É‘I‚Ô
366+ // どれを選んでも同じなら,ランダムに選ぶ
367367 // for tie breaking
368368 if (possibleTuples == 0)
369369 bestValue = candidateValues.get(this.rnd
@@ -373,7 +373,7 @@ class Generator5 extends Generator {
373373 }
374374 }
375375
376- // VƒJƒo[‚ª0‚Æ‚¢‚¤‚±‚Æ‚à‚ ‚é
376+ // 新カバーが0ということもある
377377 return tmp;
378378 }
379379
@@ -453,8 +453,8 @@ class QuintTable extends TupleTable {
453453 // requires p1 != p2 != p3 != p4
454454 boolean get(int p1, byte v1, int p2, byte v2, int p3, byte v3, int p4,
455455 byte v4, int p5, byte v5) {
456- // pair‚̏ꍇ‚É‚à”½‰fH
457- // ˆöŽq‚̏¸‡‚Ƀ\[ƒg
456+ // pairの場合にも反映?
457+ // 因子の昇順にソート
458458 ParameterValuePair[] pv = new ParameterValuePair[5];
459459 pv[0] = new ParameterValuePair(p1, v1);
460460 pv[1] = new ParameterValuePair(p2, v2);
@@ -466,7 +466,7 @@ class QuintTable extends TupleTable {
466466 return this.table[pv[0].p][pv[1].p][pv[2].p][pv[3].p][pv[4].p].list[getOffset(pv)];
467467 }
468468
469- // Œ»‚ê‚È‚¢ê‡D‚·‚łɃJƒo[‚µ‚½ê‡
469+ // 現れない場合.すでにカバーした場合
470470 // requires p1 != p2 != p3 != p4
471471 void set(int p1, byte v1, int p2, byte v2, int p3, byte v3, int p4,
472472 byte v4, int p5, byte v5) {
--- a/src/main/java/v1/GeneratorAll.java
+++ b/src/main/java/v1/GeneratorAll.java
@@ -20,7 +20,7 @@ class GeneratorAll {
2020 for (int i = 1; i < numOfAllCombinations; i++) {
2121 tmptest = tmptest.makeClone();
2222 for (int p = 0; p < parameterModel.size; p++) {
23- if (tmptest.get(p) + 1 >= parameterModel.range[p]) // ‚¯‚½‚ ‚°
23+ if (tmptest.get(p) + 1 >= parameterModel.range[p]) // けたあげ
2424 tmptest.set(p, (byte) 0);
2525 else {
2626 tmptest.set(p, (byte) (tmptest.get(p) + 1));
--- a/src/main/java/v1/Group.java
+++ b/src/main/java/v1/Group.java
@@ -33,7 +33,7 @@ class Group {
3333 }
3434 }
3535
36-// TODO TreeSet‚É‚·‚遨d•¡‚ðíœ
36+// TODO TreeSetにする→重複を削除
3737 class GList extends ArrayList<Group> {
3838 private static final long serialVersionUID = -6705998890411938435L;
3939
@@ -53,7 +53,7 @@ class MyComparator implements Comparator<Group> {
5353 return -1;
5454 }
5555
56- // g0 ‚Æ g1‚ª“¯ƒTƒCƒY
56+ // g0 と g1が同サイズ
5757 for (int i = 0; i < g0.member.length; i++) {
5858 if (g0.member[i] > g1.member[i])
5959 return 1;
--- a/src/main/java/v1/Inputer.java
+++ b/src/main/java/v1/Inputer.java
@@ -13,8 +13,8 @@ import java.util.TreeSet;
1313
1414 public class Inputer {
1515
16- // @ƒV[ƒh‚ÅŽw’肳‚ꂽ•”•ªƒeƒXƒg‚Ì—ñ‚ð‚©‚¦‚·
17- // filename ‚ªnull‚È‚ç‘å‚«‚³0‚Ì—ñ‚ð•Ô‚·
16+ //  シードで指定された部分テストの列をかえす
17+ // filename がnullなら大きさ0の列を返す
1818 static List<Testcase> readSeed(String filename, InputFileData inputfiledata) {
1919 List<Testcase> seed = new ArrayList<Testcase>();
2020 if (filename == null)
@@ -29,12 +29,12 @@ public class Inputer {
2929 * System.out.print(str + "\t"); } System.out.println();
3030 */
3131
32- // seed file ‚Í‹ó”’
32+ // seed file は空白
3333 if (row == null)
3434 return seed;
3535 // parameters
3636 if (isParameterConsistent(row, inputfiledata) == false) {
37- Error.printError(Main.language == Main.Language.JP ? "seedƒtƒ@ƒCƒ‹‚̈öŽq‚Ì‹Lq‚ÉŒë‚肪‚ ‚è‚Ü‚·"
37+ Error.printError(Main.language == Main.Language.JP ? "seedファイルの因子の記述に誤りがあります"
3838 : "There is an invalid parameter in the seeding file.");
3939 return null;
4040 }
@@ -54,14 +54,14 @@ public class Inputer {
5454
5555
5656 * if (isValueConsistent(row, inputfiledata) == false) {
57- * Error.printError("seedƒtƒ@ƒCƒ‹‚Ì’l‚Ì‹Lq‚ÉŒë‚肪‚ ‚è‚Ü‚·"); return null; }
57+ * Error.printError("seedファイルの値の記述に誤りがあります"); return null; }
5858 */
5959
60- // Testcase ¶¬‚ƒljÁ
60+ // Testcase 生成と追加
6161 Testcase newtest = createTestcase(row, inputfiledata);
6262
6363 if (newtest == null) {
64- Error.printError(Main.language == Main.Language.JP ? "seedƒtƒ@ƒCƒ‹‚Ì’l‚Ì‹Lq‚ÉŒë‚肪‚ ‚è‚Ü‚·"
64+ Error.printError(Main.language == Main.Language.JP ? "seedファイルの値の記述に誤りがあります"
6565 : "There is an invalid parameter value in the seeding file.");
6666 return null;
6767 } else {
@@ -75,7 +75,7 @@ public class Inputer {
7575 try {
7676 reader.close();
7777 } catch (IOException e) {
78- Error.printError(Main.language == Main.Language.JP ? "seedƒtƒ@ƒCƒ‹‚ɃAƒNƒZƒX‚Å‚«‚Ü‚¹‚ñ"
78+ Error.printError(Main.language == Main.Language.JP ? "seedファイルにアクセスできません"
7979 : "Cannot access the seeding file.");
8080 }
8181
@@ -84,7 +84,7 @@ public class Inputer {
8484
8585 private static Testcase createTestcase(List<String> row,
8686 InputFileData inputfiledata) {
87- // ’l‚ª³‚µ‚¢‚©H
87+ // 値が正しいか?
8888 Testcase newtest = new Testcase(inputfiledata.parameterList.size());
8989 int i = 0;
9090 for (i = 0; i < Math
@@ -95,7 +95,7 @@ public class Inputer {
9595 continue;
9696 }
9797 try {
98- // •¡”“¯‚¶’l‚ª‚ ‚ê‚΁CÅ‰‚Ì‚à‚Ì‚Æ‚Ý‚È‚·
98+ // 複数同じ値があれば,最初のものとみなす
9999 // newtest.set(i, (byte)
100100 // inputfiledata.parameterList.get(i).getID(valuename));
101101 newtest.set(i,
@@ -105,7 +105,7 @@ public class Inputer {
105105 return null;
106106 }
107107 }
108- // s‚É‘Sƒpƒ‰ƒ[ƒ^•ª‚Ì’l‚ª‚È‚¯‚ê‚΁C‹ó”’‚ð“ü‚ê‚é
108+ // 行に全パラメータ分の値がなければ,空白を入れる
109109 for (; i < inputfiledata.parameterList.size(); i++) {
110110 newtest.setWildCard(i);
111111 }
@@ -114,7 +114,7 @@ public class Inputer {
114114
115115 private static boolean isParameterConsistent(List<String> row,
116116 InputFileData inputfiledata) {
117- // @ˆöŽq”‚̃`ƒFƒbƒN
117+ //  因子数のチェック
118118 if (inputfiledata.parameterList.size() != row.size())
119119 return false;
120120
@@ -138,14 +138,14 @@ public class Inputer {
138138 if (line == null)
139139 break;
140140
141- // TODO ,‚Ì‘OŒã‚Ì‹ó”’‚Æ#‚Ì‘O‚Ì‹ó”’‚ð‚Æ‚Á‚āA,‚ðƒZƒpƒŒ[ƒ^‚É
141+ // TODO ,の前後の空白と#の前の空白をとって、,をセパレータに
142142 // line = line.replaceAll("#", ",#,");
143- // #ˆÈ~‚ðÁ‹Ž
143+ // #以降を消去
144144 line = line.replaceAll("#.*", "");
145145
146- // ,‚©‚çŽn‚Ü‚éê‡Cs“ª‚ɃXƒy[ƒX‚ð“ü‚ê‚é
146+ // ,から始まる場合,行頭にスペースを入れる
147147 // line = line.replaceAll(",", " ,");
148- // ,‚Ì‘OŒã‚ɃXƒy[ƒX‚ð“ü‚ê‚éD2016/2/19ˆÈ‰º‚ð’ljÁ
148+ // ,の前後にスペースを入れる.2016/2/19以下を追加
149149 line = line.replaceAll(",", " , ");
150150 StringTokenizer st = new StringTokenizer(line, ",");
151151 while (st.hasMoreTokens()) {
@@ -157,10 +157,10 @@ public class Inputer {
157157 tokenList.add(token);
158158 }
159159 } catch (IOException e) {
160- Error.printError("IO@error");
160+ Error.printError("IO error");
161161 return null;
162162 }
163- // ‹ó”’‚¾‚¯CƒRƒƒ“ƒg‚¾‚¯‚Ȃ玟‚̍s‚ð‚æ‚Þ
163+ // 空白だけ,コメントだけなら次の行をよむ
164164 boolean isAllEmpty = true;
165165 for (String token : tokenList) {
166166 if (token.equals("") == false) {
@@ -188,27 +188,27 @@ public class Inputer {
188188 List<String> tokenList = makeTokenList(reader);
189189 TokenHandler t = new TokenHandler(tokenList);
190190
191- // ˆöŽqA’l‚Ì‚æ‚Ý‚±‚Ý
191+ // 因子、値のよみこみ
192192 PList parameterList = readParameter(t);
193193
194- // ƒeƒXƒg
194+ // テスト
195195 /*
196196 * for(Parameter p: parameterList) { System.err.print(p.name + ": ");
197197 * for (String name : p.value_name) { System.err.print(name + ", "); }
198198 * System.err.println(); }
199199 */
200200
201- // ƒOƒ‹[ƒv
201+ // グループ
202202 GList groupList = readGroup(t, parameterList);
203203
204- // ƒeƒXƒg
204+ // テスト
205205
206206 /*
207207 * for(Group g: groupList) { for (int i = 0; i < g.size; i++)
208208 * System.out.print(g.member[i] + ", "); System.out.println(); }
209209 */
210210
211- // §–ñ
211+ // 制約
212212
213213 // List<Node> constraintList = readConstraint(t, parameterList);
214214 ConstraintListAndConstrainedParameters constraints = readConstraint(t, parameterList);
@@ -217,7 +217,7 @@ public class Inputer {
217217 try {
218218 reader.close();
219219 } catch (IOException e) {
220- Error.printError(Main.language == Main.Language.JP ? "“ü—̓tƒ@ƒCƒ‹‚ɃAƒNƒZƒX‚Å‚«‚Ü‚¹‚ñ"
220+ Error.printError(Main.language == Main.Language.JP ? "入力ファイルにアクセスできません"
221221 : "Cannot access the input file");
222222 }
223223 // return new InputFileData(parameterList, groupList, constraintList);
@@ -239,7 +239,7 @@ public class Inputer {
239239 return new ConstraintListAndConstrainedParameters(constraintList, constrainedParameters);
240240 }
241241
242- // ƒOƒ‹[ƒv‚̓ǂݍž‚Ý
242+ // グループの読み込み
243243 private static GList readGroup(TokenHandler t, PList parameterList) {
244244 GList groupList = new GList();
245245 while (true) {
@@ -251,17 +251,17 @@ public class Inputer {
251251 Error.printError("{ expected");
252252 }
253253 } catch (OutOfTokenStreamException e) {
254- Error.printError(Main.language == Main.Language.JP ? "ƒpƒ‰ƒ[ƒ^Žw’è‚ÉŒë‚肪‚ ‚è‚Ü‚·"
254+ Error.printError(Main.language == Main.Language.JP ? "パラメータ指定に誤りがあります"
255255 : "Invalid parameter");
256256 }
257- // ƒOƒ‹[ƒv‚̃pƒ‰ƒ[ƒ^
257+ // グループのパラメータ
258258 Set<Integer> memberSet = new TreeSet<Integer>();
259259 do {
260260 String name = null;
261261 try {
262- name = t.getToken(); // ƒ`ƒFƒbƒN‚µ‚Ä‚È‚¢
262+ name = t.getToken(); // チェックしてない
263263 } catch (OutOfTokenStreamException e) {
264- Error.printError(Main.language == Main.Language.JP ? "ƒOƒ‹[ƒvŽw’è‚ÉŒë‚肪‚ ‚è‚Ü‚·"
264+ Error.printError(Main.language == Main.Language.JP ? "グループ指定に誤りがあります"
265265 : "Invalid grouping");
266266 }
267267 try {
@@ -271,28 +271,28 @@ public class Inputer {
271271 */
272272 memberSet.add(Integer.valueOf(parameterList.getID(name)));
273273 } catch (NoParameterNameException e) {
274- Error.printError(Main.language == Main.Language.JP ? "ƒOƒ‹[ƒvŽw’è‚ňöŽq–¼‚ÉŒë‚肪‚ ‚è‚Ü‚·"
274+ Error.printError(Main.language == Main.Language.JP ? "グループ指定で因子名に誤りがあります"
275275 : "Invalid parameter in group");
276276 }
277277 if (t.peepToken() == null) {
278- Error.printError(Main.language == Main.Language.JP ? "ƒOƒ‹[ƒvŽw’è‚ÉŒë‚肪‚ ‚è‚Ü‚·"
278+ Error.printError(Main.language == Main.Language.JP ? "グループ指定に誤りがあります"
279279 : "Invalid grouping");
280280 }
281281 } while (t.peepToken().equals("}") == false);
282282 Group g = new Group(memberSet);
283283 groupList.add(g);
284284
285- // } ‚Ì‚æ‚Ý‚±‚Ý
285+ // } のよみこみ
286286 try {
287287 t.getToken();
288288 } catch (OutOfTokenStreamException e) {
289- Error.printError(Main.language == Main.Language.JP ? "ƒOƒ‹[ƒvŽw’è‚ÉŒë‚肪‚ ‚è‚Ü‚·"
289+ Error.printError(Main.language == Main.Language.JP ? "グループ指定に誤りがあります"
290290 : "Invalid grouping");
291291 }
292292 }
293- // TODO group‚̐®—ñ
293+ // TODO groupの整列
294294 groupList.sort();
295- // TODO d•¡—v‘f‚̍폜
295+ // TODO 重複要素の削除
296296
297297 return groupList;
298298 }
@@ -307,8 +307,8 @@ public class Inputer {
307307 try {
308308 reader = new BufferedReader(new FileReader(filename));
309309 } catch (FileNotFoundException e) {
310- Error.printError(Main.language == Main.Language.JP ? "ƒtƒ@ƒCƒ‹"
311- + filename + "‚ªŒ©‚‚©‚è‚Ü‚¹‚ñD" : "Cannot find file " + filename);
310+ Error.printError(Main.language == Main.Language.JP ? "ファイル"
311+ + filename + "が見つかりません." : "Cannot find file " + filename);
312312 }
313313 return reader;
314314 }
@@ -347,7 +347,7 @@ public class Inputer {
347347 return tokenList;
348348 }
349349
350- // ƒpƒ‰ƒ[ƒ^‚̓ǂݍž‚Ý
350+ // パラメータの読み込み
351351 private static PList readParameter(TokenHandler t) {
352352 PList parameterList = new PList();
353353
@@ -358,47 +358,47 @@ public class Inputer {
358358 break;
359359 }
360360
361- // ƒpƒ‰ƒ[ƒ^‚Ì–¼‘O
361+ // パラメータの名前
362362 // parameter name. Should be non-null
363363 String parameter_name = t.getToken();
364364 checkParameterName(parameter_name);
365365 Parameter p = new Parameter(parameter_name);
366366
367367 if (t.getToken().equals("(") == false) {
368- Error.printError(Main.language == Main.Language.JP ? "( ‚ª‚ ‚è‚Ü‚¹‚ñD"
368+ Error.printError(Main.language == Main.Language.JP ? "( がありません."
369369 : "( expected");
370370 }
371- // ƒŒƒxƒ‹‚Ì–¼‘O
371+ // レベルの名前
372372 do {
373- String level_name = t.getToken(); // ƒ`ƒFƒbƒN‚µ‚Ä‚È‚¢
373+ String level_name = t.getToken(); // チェックしてない
374374 checkLevelName(level_name);
375375 p.addName(level_name);
376376 if (t.peepToken() == null) {
377- Error.printError(Main.language == Main.Language.JP ? "ƒpƒ‰ƒ[ƒ^Žw’è‚ÉŒë‚肪‚ ‚è‚Ü‚·"
377+ Error.printError(Main.language == Main.Language.JP ? "パラメータ指定に誤りがあります"
378378 : "Invalid parameters");
379379 }
380380 } while (t.peepToken().equals(")") == false);
381- // ) ‚Ì‚æ‚Ý‚±‚Ý
381+ // ) のよみこみ
382382 t.getToken();
383383
384- // ’l–¼‚̏d•¡ƒ`ƒFƒbƒN
384+ // 値名の重複チェック
385385 p.check();
386386
387387 parameterList.add(p);
388388 } catch (OutOfTokenStreamException e) {
389- Error.printError(Main.language == Main.Language.JP ? "ƒpƒ‰ƒ[ƒ^Žw’è‚ÉŒë‚肪‚ ‚è‚Ü‚·"
389+ Error.printError(Main.language == Main.Language.JP ? "パラメータ指定に誤りがあります"
390390 : "Invalid parameters");
391391 }
392392 }
393393
394- // @ˆöŽq–¼‚̏d•¡ƒ`ƒFƒbƒN
394+ //  因子名の重複チェック
395395 if (parameterList.checkNameDuplication())
396- Error.printError(Main.language == Main.Language.JP ? "ˆöŽq–¼‚ªd•¡‚µ‚Ä‚¢‚Ü‚·"
396+ Error.printError(Main.language == Main.Language.JP ? "因子名が重複しています"
397397 : "Duplicated parameters");
398398
399- // ˆöŽq” >= 2
399+ // 因子数 >= 2
400400 if (parameterList.size() < 2)
401- Error.printError(Main.language == Main.Language.JP ? "ˆöŽq‚Í2ŒÂˆÈã•K—v‚Å‚·"
401+ Error.printError(Main.language == Main.Language.JP ? "因子は2個以上必要です"
402402 : "Multiple parameters required");
403403
404404 return parameterList;
@@ -410,7 +410,7 @@ public class Inputer {
410410 || name.contains("}") || name.contains("[")
411411 || name.contains("]") || name.contains(";")
412412 || name.contains(",")) {
413- Error.printError(Main.language == Main.Language.JP ? "ˆöŽq–¼‚É‹ÖŽ~•¶Žš‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·"
413+ Error.printError(Main.language == Main.Language.JP ? "因子名に禁止文字が含まれています"
414414 : "Invalid symbol in parameter name");
415415 }
416416 }
@@ -421,7 +421,7 @@ public class Inputer {
421421 || name.contains("}") || name.contains("[")
422422 || name.contains("]") || name.contains(";")
423423 || name.contains(",")) {
424- Error.printError(Main.language == Main.Language.JP ? "…€–¼‚É‹ÖŽ~•¶Žš‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·"
424+ Error.printError(Main.language == Main.Language.JP ? "水準名に禁止文字が含まれています"
425425 : "Invalid symbol in parameter value");
426426 }
427427 }
--- a/src/main/java/v1/Main.java
+++ b/src/main/java/v1/Main.java
@@ -32,21 +32,21 @@ public class Main {
3232 long start = System.currentTimeMillis();
3333
3434 try {
35- // ƒRƒ}ƒ“ƒhˆø”ˆ—
35+ // コマンド引数処理
3636 String errorMessage = processCommandArgument(args);
3737
38- // ƒGƒ‰[o—͐æÝ’è
38+ // エラー出力先設定
3939 Error.setOutputFile(outputFile);
4040
41- // ƒRƒ}ƒ“ƒhˆø”‚ł̃Gƒ‰[o—Í
41+ // コマンド引数でのエラー出力
4242 if (errorMessage != null)
4343 Error.printError(errorMessage);
4444
45- // ƒ‚ƒfƒ‹“ǂݍž‚Ý
45+ // モデル読み込み
4646 // System.err.println("starting reading model");
4747 InputFileData inputfiledata = Inputer.readModel(modelFile);
4848
49- // §–ñˆ— BDDì¬
49+ // 制約処理 BDD作成
5050 // System.err.println("starting building bdd");
5151
5252 // old version where all parameters are considered in BDD
@@ -56,23 +56,23 @@ public class Main {
5656 // newer version
5757 ConstraintHandler conhndl = new ConstraintHandler(
5858 inputfiledata.parameterList, inputfiledata.constraintList, inputfiledata.constrainedParameters);
59- // DEBUG: BDD‚Ì•\Ž¦
59+ // DEBUG: BDDの表示
6060 /* conhndl.printConstraintBDD(); */
6161
62- // @ƒV[ƒh“ǂݍž‚Ý
62+ //  シード読み込み
6363 List<Testcase> seed = Inputer.readSeed(seedFile, inputfiledata);
6464
65- // ƒeƒXƒgƒP[ƒX¶¬
65+ // テストケース生成
6666 // System.err.println("starting test suite construction");
6767 List<Testcase> testSet = null;
6868 if (strength == -1) {
69- // ‘S–Ô—…
69+ // 全網羅
7070 try {
7171 testSet = GeneratorAll.generate(new ParameterModel(
7272 inputfiledata.parameterList), conhndl);
7373 } catch (OutOfMaxNumOfTestcasesException e) {
74- Error.printError(Main.language == Main.Language.JP ? "ƒeƒXƒgƒP[ƒX”‚ªãŒÀ"
75- + Generator.MaxNumOfTestcases + "‚ð’´‚¦‚Ü‚µ‚½"
74+ Error.printError(Main.language == Main.Language.JP ? "テストケース数が上限"
75+ + Generator.MaxNumOfTestcases + "を超えました"
7676 : "The number of test cases exceeded the upper bound "
7777 + Generator.MaxNumOfTestcases);
7878 }
@@ -92,7 +92,7 @@ public class Main {
9292
9393 if (debugMode)
9494 System.err.println("random seed: " + randomSeed);
95- // ŒJ‚è•Ô‚·ê‡
95+ // 繰り返す場合
9696 for (int i = 2; i < numOfIterations; i++) {
9797 int nextRandomSeed = (int) Math.floor(Math.random()
9898 * (Max_RandomSeed + 1));
@@ -122,8 +122,8 @@ public class Main {
122122 }
123123 }
124124 if (testSet == null)
125- Error.printError(Main.language == Main.Language.JP ? "ƒeƒXƒgƒP[ƒX”‚ªãŒÀ"
126- + Generator.MaxNumOfTestcases + "‚ð’´‚¦‚Ü‚µ‚½"
125+ Error.printError(Main.language == Main.Language.JP ? "テストケース数が上限"
126+ + Generator.MaxNumOfTestcases + "を超えました"
127127 : "The number of test cases exceeded the upper bound "
128128 + Generator.MaxNumOfTestcases);
129129
@@ -137,10 +137,10 @@ public class Main {
137137 System.err.println("test set size: " + testSet.size());
138138 }
139139 } catch (OutOfMemoryError e) {
140- Error.printError(Main.language == Main.Language.JP ? "ƒƒ‚ƒŠ•s‘«‚Å‚·D"
140+ Error.printError(Main.language == Main.Language.JP ? "メモリ不足です."
141141 : "Out of memory");
142142 } catch (Exception e) {
143- Error.printError(Main.language == Main.Language.JP ? "ƒvƒƒOƒ‰ƒ€‚ªˆÙíI—¹‚µ‚Ü‚µ‚½D"
143+ Error.printError(Main.language == Main.Language.JP ? "プログラムが異常終了しました."
144144 : "Abnormal termination");
145145 }
146146
@@ -148,13 +148,13 @@ public class Main {
148148 // System.err.println("time: " + (end - start) + "ms");
149149 }
150150
151- // ƒRƒ}ƒ“ƒhˆø”ˆ—
151+ // コマンド引数処理
152152 private static String processCommandArgument(String[] args) {
153153 if (args.length == 0) {
154154 Error.printError("usage: java -jar Program.jar [-i input] [-o output] [-policy] ...");
155155 }
156156
157- // policy‚Ì•\Ž¦
157+ // policyの表示
158158 if (args.length == 1 && args[0].equals("-policy")) {
159159 System.out
160160 .println("This software (CIT-BACH 1.1) is distributed under the zlib license.\n"
@@ -184,7 +184,7 @@ public class Main {
184184 System.exit(0);
185185 }
186186
187- // ƒGƒ‰[•\Ž¦‚ðo—̓tƒ@ƒCƒ‹‚ªŽw’肳‚ê‚é‚Ü‚Å’x‚点‚é
187+ // エラー表示を出力ファイルが指定されるまで遅らせる
188188 String errorMessage = null;
189189
190190 for (int i = 0; i + 1 < args.length; i += 2) {
@@ -199,45 +199,45 @@ public class Main {
199199 randomSeed = Integer.parseInt(str);
200200 } catch (NumberFormatException e) {
201201 // Error.printError("invalid number");
202- errorMessage = Main.language == Main.Language.JP ? "ƒ‰ƒ“ƒ_ƒ€ƒV[ƒh‚É–³Œø‚È’l‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
202+ errorMessage = Main.language == Main.Language.JP ? "ランダムシードに無効な値が指定されています."
203203 : "Invalid random seed";
204204 continue;
205205 }
206206 randomSeed = Math.abs(randomSeed) % (Max_RandomSeed + 1);
207207 } else if (option.equals("-c")) {
208208 if (str.equals("all")) {
209- // ‘S–Ô—…
209+ // 全網羅
210210 strength = -1;
211211 } else {
212212 try {
213213 strength = Integer.parseInt(str);
214214 } catch (NumberFormatException e) {
215215 // Error.printError("invalid number");
216- errorMessage = Main.language == Main.Language.JP ? "–Ô—…“x‚É–³Œø‚È’l‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
216+ errorMessage = Main.language == Main.Language.JP ? "網羅度に無効な値が指定されています."
217217 : "Invalid strength";
218218 continue;
219219 }
220220 if (strength < 2 || MAX_STRENGTH < strength) {
221221 // Error.printError("invalid strength");
222- errorMessage = Main.language == Main.Language.JP ? "–Ô—…“x‚É–³Œø‚È’l‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
222+ errorMessage = Main.language == Main.Language.JP ? "網羅度に無効な値が指定されています."
223223 : "Invalid strength";
224224 continue;
225225 }
226226 }
227227 }
228- // ŒJ‚è•Ô‚µ”
228+ // 繰り返し数
229229 else if (option.equals("-repeat")) {
230230 try {
231231 numOfIterations = Integer.parseInt(str);
232232 } catch (NumberFormatException e) {
233233 // Error.printError("invalid repeating number");
234- errorMessage = Main.language == Main.Language.JP ? "‚­‚è•Ô‚µ”‚É–³Œø‚È’l‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
234+ errorMessage = Main.language == Main.Language.JP ? "くり返し数に無効な値が指定されています."
235235 : "Invalid number of repetition times";
236236 continue;
237237 }
238238 if (numOfIterations <= 0 || numOfIterations > MAX_ITERATIONS) {
239239 // Error.printError("invalid repeating number");
240- errorMessage = Main.language == Main.Language.JP ? "‚­‚è•Ô‚µ”‚É–³Œø‚È’l‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
240+ errorMessage = Main.language == Main.Language.JP ? "くり返し数に無効な値が指定されています."
241241 : "Invalid number of repetition times";
242242 continue;
243243 }
@@ -245,19 +245,19 @@ public class Main {
245245 seedFile = str;
246246 } else if (option.equals("-debug")) {
247247 debugMode = true;
248- // ŽŸ‚̈ø”‚̓_ƒ~[
248+ // 次の引数はダミー
249249 } else if (option.equals("-lang")) {
250250 if (str.matches("JP|jp")) {
251251 Main.language = Main.Language.JP;
252252 } else if (str.matches("EN|en")) {
253253 Main.language = Main.Language.EN;
254254 } else {
255- errorMessage = "–³Œø‚ÈŒ¾Œê‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚· (Invalid Language)";
255+ errorMessage = "無効な言語が指定されています (Invalid Language)";
256256 continue;
257257 }
258258 } else {
259259 // Error.printError("Invalid option");
260- errorMessage = Main.language == Main.Language.JP ? "–³Œø‚ȃIƒvƒVƒ‡ƒ“‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·D"
260+ errorMessage = Main.language == Main.Language.JP ? "無効なオプションが指定されています."
261261 : "Invalid option";
262262 continue;
263263 }
--- a/src/main/java/v1/Node.java
+++ b/src/main/java/v1/Node.java
@@ -280,7 +280,7 @@ class EqualityOfParameterAndValue extends ComparisonOfParameterAndValue {
280280 int evaluate(BDD bdd, List<VariableAndBDD> parameters) {
281281 int res = bdd.getOne();
282282 bdd.ref(res);
283- // p‚́iâ‘Î’l‚Łjƒpƒ‰ƒ[ƒ^‚̔ԍ†‚ªŠù‚É‚Í‚¢‚Á‚Ä‚¢‚é
283+ // pは(絶対値で)パラメータの番号が既にはいっている
284284 //
285285 int[] var = parameters.get(this.p).var;
286286 for (int i = var.length - 1; i >= 0; i--) {
@@ -302,7 +302,7 @@ class EqualityOfParameterAndValue extends ComparisonOfParameterAndValue {
302302 int evaluate(BDD bdd, List<VariableAndBDD> parameters, Set<Integer> restricted) {
303303 int res = bdd.getOne();
304304 bdd.ref(res);
305- // p‚́iâ‘Î’l‚Łjƒpƒ‰ƒ[ƒ^‚̔ԍ†‚ªŠù‚É‚Í‚¢‚Á‚Ä‚¢‚é
305+ // pは(絶対値で)パラメータの番号が既にはいっている
306306 int num = 0;
307307 for (Integer i: restricted) {
308308 if (i == this.p)
--- a/src/main/java/v1/Outputer.java
+++ b/src/main/java/v1/Outputer.java
@@ -25,9 +25,9 @@ public class Outputer {
2525 writer = new BufferedWriter(new FileWriter(filename));
2626 } catch (IOException e) {
2727 // System.err.print(filename + " cannot be created.");
28- // ƒGƒ‰[‚ð‘‚«ž‚ß‚È‚¢‚Ì‚Å’¼Ú•W€ƒGƒ‰[‚Ö
29- System.err.print(Main.language == Main.Language.JP ? "o—̓tƒ@ƒCƒ‹"
30- + filename + "‚ªì¬‚Å‚«‚Ü‚¹‚ñD" : "Cannot create output file "
28+ // エラーを書き込めないので直接標準エラーへ
29+ System.err.print(Main.language == Main.Language.JP ? "出力ファイル"
30+ + filename + "が作成できません." : "Cannot create output file "
3131 + filename);
3232 System.exit(1);
3333 }
@@ -64,7 +64,7 @@ public class Outputer {
6464 }
6565 }
6666
67- // ‘S–Ô—…—p
67+ // 全網羅用
6868 public void outputResult(List<Testcase> testSet,
6969 InputFileData inputfiledata, String modelFile, String outputFile) {
7070 // TODO Auto-generated method stub
--- a/src/main/java/v1/Parameter.java
+++ b/src/main/java/v1/Parameter.java
@@ -14,19 +14,19 @@ public class Parameter {
1414 value_name.add(name);
1515 }
1616
17- // ’l–¼‚̏d•¡‚̃`ƒFƒbƒN@d•¡‚µ‚Ä‚¢‚ê‚΃Gƒ‰[
17+ // 値名の重複のチェック 重複していればエラー
1818 void check() {
1919 if (value_name.size() <= 0 || value_name.size() > Main.MAX_LEVEL) {
20- Error.printError(Main.language == Main.Language.JP ? "…€”‚ÉŒë‚肪‚ ‚è‚Ü‚·"
20+ Error.printError(Main.language == Main.Language.JP ? "水準数に誤りがあります"
2121 : "Invalid number of values");
2222 }
2323
24- /* …€–¼‚̏d•¡‚ð‹ÖŽ~-> comment out */
24+ /* 水準名の重複を禁止-> comment out */
2525 /*
2626 * for (int i = 0; i < value_name.size() - 1; i++) { for (int j = i+1; j
2727 * < value_name.size(); j++) { if
2828 * (value_name.get(i).equals(value_name.get(j)))
29- * Error.printError(Main.language == Main.Language.JP ? "…€–¼‚ªd•¡‚µ‚Ä‚¢‚Ü‚·" :
29+ * Error.printError(Main.language == Main.Language.JP ? "水準名が重複しています" :
3030 * "Overlap of parameter value name"); } }
3131 */
3232 }
@@ -49,7 +49,7 @@ public class Parameter {
4949 return ids;
5050 }
5151
52- // number‚ÆŽZp“I‚É“¯‚¶…€‚Ìid‚ð‚Ƃ肾‚·¨‚‚©‚Á‚Ä‚È‚¢
52+ // numberと算術的に同じ水準のidをとりだす→つかってない
5353 List<Integer> getID(double number) {
5454 List<Integer> ids = new ArrayList<Integer>();
5555 for (int i = 0; i < value_name.size(); i++) {
@@ -63,8 +63,8 @@ public class Parameter {
6363 return ids;
6464 }
6565
66- // number‚ÆŽZp“I‚ÉŠÖŒW‚Ì‚ ‚鐅€‚Ìid‚ð‚Ƃ肾‚·
67- // level ` number
66+ // numberと算術的に関係のある水準のidをとりだす
67+ // level ~ number
6868 List<Integer> getID(double number, RelationOverDoublePair com) {
6969 List<Integer> ids = new ArrayList<Integer>();
7070 for (int i = 0; i < value_name.size(); i++) {
--- a/src/main/java/v1/ParameterModel.java
+++ b/src/main/java/v1/ParameterModel.java
@@ -1,9 +1,9 @@
11 package v1;
22
33 public class ParameterModel {
4- // ˆöŽq‚̐”
4+ // 因子の数
55 public final int size;
6- // ŠeˆöŽq‚̃Œƒxƒ‹”
6+ // 各因子のレベル数
77 public final byte[] range;
88
99 public ParameterModel(PList plist) {
--- a/src/main/java/v1/Parse.java
+++ b/src/main/java/v1/Parse.java
@@ -33,7 +33,7 @@ public class Parse {
3333 String nextToken = t.peepToken();
3434 try {
3535 if (nextToken == null) {
36- Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚ÉŒë‚肪‚ ‚è‚Ü‚·"
36+ Error.printError(Main.language == Main.Language.JP ? "制約式に誤りがあります"
3737 : "Invalid constraints");
3838 return null;
3939 }
@@ -43,24 +43,24 @@ public class Parse {
4343 }
4444 else {
4545 // error
46- Error.printError(Main.language == Main.Language.JP ? "§–ñ‚É'('‚ª‚ ‚è‚Ü‚¹‚ñ"
46+ Error.printError(Main.language == Main.Language.JP ? "制約に'('がありません"
4747 : "( expected in constraints");
4848 return null;
4949 }
5050 } catch (OutOfTokenStreamException e) {
51- Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚ÉŒë‚肪‚ ‚è‚Ü‚·"
51+ Error.printError(Main.language == Main.Language.JP ? "制約式に誤りがあります"
5252 : "Invalid constraints");
5353 return null;
5454 }
5555 }
5656
5757 private Node expressionWithParentheses() throws OutOfTokenStreamException {
58- Node res; // –ß‚è’l
58+ Node res; // 戻り値
5959 String token = t.getToken();
6060 if (token.equals("(") == false) {
6161 // error
6262 // this block is unreachable
63- Error.printError(Main.language == Main.Language.JP ? "§–ñ‚É'('‚ª‚ ‚è‚Ü‚¹‚ñ"
63+ Error.printError(Main.language == Main.Language.JP ? "制約に'('がありません"
6464 : "( expected in constraints");
6565 return null;
6666 }
@@ -75,7 +75,7 @@ public class Parse {
7575 // closed with ')' ?
7676 if (t.getToken().equals(")") == false) {
7777 // error
78- Error.printError(Main.language == Main.Language.JP ? "§–ñ‚É')'‚ª‚ ‚è‚Ü‚¹‚ñ"
78+ Error.printError(Main.language == Main.Language.JP ? "制約に')'がありません"
7979 : ") expected in constraints");
8080 return null;
8181 }
@@ -83,7 +83,7 @@ public class Parse {
8383 }
8484
8585 private Node expressionBody() throws OutOfTokenStreamException {
86- // ‰‰ŽZŽq‚ÌŽŸ‚̃g[ƒNƒ“‚ª ( ‚© ‚Ç‚¤‚©‚Å”»’f
86+ // 演算子の次のトークンが ( か どうかで判断
8787 // case 1: ( <> (
8888 // case 2: ( <> [ foo, ( <> foo
8989 String nextNextToken = t.peepNextToken();
@@ -191,7 +191,7 @@ public class Parse {
191191 }
192192
193193 private Node atomExpression() throws OutOfTokenStreamException {
194- // ŽŸ‚̃g[ƒNƒ“‚ðƒ`ƒFƒbƒN: ‰‰ŽZŽq‚Å‚È‚¢‚Æ‚¢‚¯‚È‚¢
194+ // 次のトークンをチェック: 演算子でないといけない
195195 String token = t.getToken();
196196 if (token.equals("=="))
197197 return equalityAtomExpression();
@@ -210,7 +210,7 @@ public class Parse {
210210 else if (token.equals(">="))
211211 return arithmeticEqualityAtomExpression(new GTE(), new LTE());
212212 else
213- Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚É == ‚© <> ‚ª•K—v‚Å‚·"
213+ Error.printError(Main.language == Main.Language.JP ? "制約式に == か <> が必要です"
214214 : "== or <> expected in constraints");
215215 return null;
216216 }
@@ -257,7 +257,7 @@ public class Parse {
257257 t.getToken(); // must be [
258258 para1 = t.getToken();
259259 if (t.getToken().equals("]") == false) {
260- Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚É]‚ª•K—v‚Å‚·"
260+ Error.printError(Main.language == Main.Language.JP ? "制約式に]が必要です"
261261 : "] expected in constraints");
262262 }
263263 return compareArithmeticParameterAndValue(para1, val1, com2);
@@ -267,7 +267,7 @@ public class Parse {
267267 t.getToken(); // must be "["
268268 para1 = t.getToken();
269269 if (t.getToken().equals("]") == false) {
270- Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚É]‚ª•K—v‚Å‚·"
270+ Error.printError(Main.language == Main.Language.JP ? "制約式に]が必要です"
271271 : "] expected in constraints");
272272 }
273273 token1 = t.peepToken();
@@ -284,7 +284,7 @@ public class Parse {
284284 t.getToken(); // must be [
285285 para2 = t.getToken();
286286 if (t.getToken().equals("]") == false) {
287- Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚É]‚ª•K—v‚Å‚·"
287+ Error.printError(Main.language == Main.Language.JP ? "制約式に]が必要です"
288288 : "] expected in constraints");
289289 }
290290 return compareArithmeticParameterAndParameter(para1, para2, com1);
@@ -319,7 +319,7 @@ public class Parse {
319319 t.getToken(); // must be [
320320 para1 = t.getToken();
321321 if (t.getToken().equals("]") == false) {
322- Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚É]‚ª•K—v‚Å‚·"
322+ Error.printError(Main.language == Main.Language.JP ? "制約式に]が必要です"
323323 : "] expected in constraints");
324324 }
325325 return compareParameterAndValue(para1, val1);
@@ -329,7 +329,7 @@ public class Parse {
329329 t.getToken(); // must be "["
330330 para1 = t.getToken();
331331 if (t.getToken().equals("]") == false) {
332- Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚É]‚ª•K—v‚Å‚·"
332+ Error.printError(Main.language == Main.Language.JP ? "制約式に]が必要です"
333333 : "] expected in constraints");
334334 }
335335 token1 = t.peepToken();
@@ -346,7 +346,7 @@ public class Parse {
346346 t.getToken(); // must be [
347347 para2 = t.getToken();
348348 if (t.getToken().equals("]") == false) {
349- Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚É]‚ª•K—v‚Å‚·"
349+ Error.printError(Main.language == Main.Language.JP ? "制約式に]が必要です"
350350 : "] expected in constraints");
351351 }
352352 return compareParameterAndParameter(para1, para2);
@@ -365,7 +365,7 @@ public class Parse {
365365 d1 = Double.parseDouble(val1);
366366 d2 = Double.parseDouble(val2);
367367 } catch (NumberFormatException e) {
368- Error.printError(Main.language == Main.Language.JP ? "”‚Å‚È‚¢•¶Žš—ñ‚ðŽZp”äŠr‚µ‚Ä‚¢‚Ü‚·"
368+ Error.printError(Main.language == Main.Language.JP ? "数でない文字列を算術比較しています"
369369 : "String that cannot be parsed as a number");
370370 }
371371 if (com.hasRelation(d1, d2))
@@ -380,32 +380,32 @@ public class Parse {
380380 // int value = 0;
381381 List<Integer> valueIDs = null;
382382
383- // ˆöŽq–¼‚ª³‚µ‚¢‚©ƒ`ƒFƒbƒN
383+ // 因子名が正しいかチェック
384384 try {
385385 parameterID = parameterList.getID(para);
386386 this.constrainedParameters.add(parameterID);
387387 } catch (NoParameterNameException e) {
388- Error.printError(Main.language == Main.Language.JP ? "§–ñ’†‚̈öŽq–¼‚ÉŒë‚肪‚ ‚è‚Ü‚·"
388+ Error.printError(Main.language == Main.Language.JP ? "制約中の因子名に誤りがあります"
389389 : "Invalid parameter name in constraints");
390390 }
391391 p = parameterList.get(parameterID);
392392
393- // ’l–¼‚ª³‚µ‚¢‚©ƒ`ƒFƒbƒN
393+ // 値名が正しいかチェック
394394 try {
395395 valueIDs = p.getID(val);
396396 } catch (NoValueNameException e) {
397- Error.printError(Main.language == Main.Language.JP ? "§–ñ’†‚Ì’l–¼‚ÉŒë‚肪‚ ‚è‚Ü‚·"
397+ Error.printError(Main.language == Main.Language.JP ? "制約中の値名に誤りがあります"
398398 : "Invalid parameter value in constraints");
399399 }
400400
401- // ’l–¼‚ɏd•¡‚È‚µ
401+ // 値名に重複なし
402402 if (valueIDs.size() == 1) {
403403 ComparisonOfParameterAndValue res = new EqualityOfParameterAndValue();
404404 res.p = parameterID;
405405 res.v = valueIDs.get(0);
406406 return res;
407407 }
408- // ’l–¼‚ɏd•¡‚ ‚è
408+ // 値名に重複あり
409409 else {
410410 BooleanMultinaryOperator res = new OrOperator();
411411 for (Integer vid : valueIDs) {
@@ -424,41 +424,41 @@ public class Parse {
424424 // int value = 0;
425425 List<Integer> valueIDs = null;
426426
427- // ˆöŽq–¼‚ª³‚µ‚¢‚©ƒ`ƒFƒbƒN
427+ // 因子名が正しいかチェック
428428 try {
429429 parameterID = parameterList.getID(para);
430430 this.constrainedParameters.add(parameterID);
431431 } catch (NoParameterNameException e) {
432- Error.printError(Main.language == Main.Language.JP ? "§–ñ’†‚̈öŽq–¼‚ÉŒë‚肪‚ ‚è‚Ü‚·"
432+ Error.printError(Main.language == Main.Language.JP ? "制約中の因子名に誤りがあります"
433433 : "Invalid parameter name in constraints");
434434 }
435435 p = parameterList.get(parameterID);
436436
437- // ’l–¼‚ª” number ‚Æ‚È‚é‚©ƒ`ƒFƒbƒN
437+ // 値名が数 number となるかチェック
438438 double number = 0;
439439 try {
440440 number = Double.parseDouble(val);
441441 } catch (NumberFormatException e) {
442- Error.printError(Main.language == Main.Language.JP ? "”‚Å‚È‚¢•¶Žš—ñ‚ðŽZp”äŠr‚µ‚Ä‚¢‚Ü‚·"
442+ Error.printError(Main.language == Main.Language.JP ? "数でない文字列を算術比較しています"
443443 : "String that cannot be parsed as a number");
444444 }
445445
446- // number‚ÆŽZp“I‚Ɉê’v‚·‚élevel‚ð‚·‚×‚ÄƒŠƒXƒg‚É‚¢‚ê‚é
447- // -> level ŠÖŒW number ‚Æ‚È‚élevel‚ð‚·‚×‚ÄƒŠƒXƒg‚É
446+ // numberと算術的に一致するlevelをすべてリストにいれる
447+ // -> level 関係 number となるlevelをすべてリストに
448448 valueIDs = p.getID(number, com);
449449
450- // ‚Ç‚ê‚àˆê’v‚¹‚¸
450+ // どれも一致せず
451451 if (valueIDs.size() == 0) {
452452 return new FalseValue();
453453 }
454- // ’l–¼‚ɏd•¡‚È‚µ
454+ // 値名に重複なし
455455 if (valueIDs.size() == 1) {
456456 ComparisonOfParameterAndValue res = new EqualityOfParameterAndValue();
457457 res.p = parameterID;
458458 res.v = valueIDs.get(0);
459459 return res;
460460 }
461- // ’l–¼‚ɏd•¡‚ ‚è
461+ // 値名に重複あり
462462 else {
463463 BooleanMultinaryOperator res = new OrOperator();
464464 for (Integer vid : valueIDs) {
@@ -475,20 +475,20 @@ public class Parse {
475475 int parameterID1 = 0;
476476 int parameterID2 = 0;
477477 Parameter p1, p2;
478- // ˆöŽq–¼‚ª³‚µ‚¢‚©ƒ`ƒFƒbƒN
478+ // 因子名が正しいかチェック
479479 try {
480480 parameterID1 = parameterList.getID(para1);
481481 parameterID2 = parameterList.getID(para2);
482482 this.constrainedParameters.add(parameterID1);
483483 this.constrainedParameters.add(parameterID2);
484484 } catch (NoParameterNameException e) {
485- Error.printError(Main.language == Main.Language.JP ? "§–ñ’†‚̈öŽq–¼‚ÉŒë‚肪‚ ‚è‚Ü‚·"
485+ Error.printError(Main.language == Main.Language.JP ? "制約中の因子名に誤りがあります"
486486 : "Invalid parameter name in constraints");
487487 }
488488 p1 = parameterList.get(parameterID1);
489489 p2 = parameterList.get(parameterID2);
490490
491- // ’l–¼‚ªˆê’v‚·‚éƒyƒA‚𐔂¦‚é
491+ // 値名が一致するペアを数える
492492 int count = 0;
493493 for (String valName1 : p1.value_name) {
494494 for (String valName2 : p2.value_name) {
@@ -497,11 +497,11 @@ public class Parse {
497497 }
498498 }
499499
500- // case 1: ’l–¼‚Å“¯‚¶‚à‚Ì‚ª‚È‚¢
500+ // case 1: 値名で同じものがない
501501 if (count == 0)
502502 return new FalseValue();
503503
504- // case 2: ’l–¼‚Å“¯‚¶‚à‚Ì‚ª‚ЂƂÂ
504+ // case 2: 値名で同じものがひとつ
505505 if (count == 1) {
506506 for (String valName1 : p1.value_name) {
507507 for (String valName2 : p2.value_name) {
@@ -528,7 +528,7 @@ public class Parse {
528528 }
529529 }
530530
531- // case 3: ’l–¼‚Å“¯‚¶‚à‚Ì‚ª2ŒÂˆÈã —vdebug ‰½‚Å case 2‚Ý‚½‚¢‚É‚µ‚Ä‚È‚¢‚́H
531+ // case 3: 値名で同じものが2個以上 要debug 何で case 2みたいにしてないの?
532532 BooleanMultinaryOperator res = new OrOperator();
533533 for (int vid1 = 0; vid1 < p1.value_name.size(); vid1++) {
534534 for (int vid2 = 0; vid2 < p2.value_name.size(); vid2++) {
@@ -553,20 +553,20 @@ public class Parse {
553553 int parameterID1 = 0;
554554 int parameterID2 = 0;
555555 Parameter p1, p2;
556- // ˆöŽq–¼‚ª³‚µ‚¢‚©ƒ`ƒFƒbƒN
556+ // 因子名が正しいかチェック
557557 try {
558558 parameterID1 = parameterList.getID(para1);
559559 parameterID2 = parameterList.getID(para2);
560560 this.constrainedParameters.add(parameterID1);
561561 this.constrainedParameters.add(parameterID2);
562562 } catch (NoParameterNameException e) {
563- Error.printError(Main.language == Main.Language.JP ? "§–ñ’†‚̈öŽq–¼‚ÉŒë‚肪‚ ‚è‚Ü‚·"
563+ Error.printError(Main.language == Main.Language.JP ? "制約中の因子名に誤りがあります"
564564 : "Invalid parameter name in constraints");
565565 }
566566 p1 = parameterList.get(parameterID1);
567567 p2 = parameterList.get(parameterID2);
568568
569- // ƒ_ƒuƒ‹‚Å‚Ì’l‚ªŠÖŒW‚ð‚à‚ƒyƒA‚𐔂¦‚é
569+ // ダブルでの値が関係をもつペアを数える
570570 int count = 0;
571571 for (String valName1 : p1.value_name) {
572572 for (String valName2 : p2.value_name) {
@@ -580,11 +580,11 @@ public class Parse {
580580 }
581581 }
582582
583- // case 1: ˆê’v‚·‚é’l–¼‚ª‚È‚¢
583+ // case 1: 一致する値名がない
584584 if (count == 0)
585585 return new FalseValue();
586586
587- // case 2: ˆê’v‚·‚é‚àƒyƒA‚ª‚ЂƂÂ
587+ // case 2: 一致するもペアがひとつ
588588 if (count == 1) {
589589 for (String valName1 : p1.value_name) {
590590 for (String valName2 : p2.value_name) {
@@ -612,7 +612,7 @@ public class Parse {
612612 } // outer for
613613 }
614614
615- // case 3: ’l–¼‚Å“¯‚¶‚à‚Ì‚ª2ŒÂˆÈã
615+ // case 3: 値名で同じものが2個以上
616616 BooleanMultinaryOperator res = new OrOperator();
617617 for (int vid1 = 0; vid1 < p1.value_name.size(); vid1++) {
618618 for (int vid2 = 0; vid2 < p2.value_name.size(); vid2++) {
@@ -676,27 +676,27 @@ class GTE extends RelationOverDoublePair {
676676 * this.parameterList = parameterList; }
677677 *
678678 * public Node parseExpression() { String token = t.peepToken(); try { if (token
679- * == null) { Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚ÉŒë‚肪‚ ‚è‚Ü‚·"
679+ * == null) { Error.printError(Main.language == Main.Language.JP ? "制約式に誤りがあります"
680680 * : "Invalid constraints"); return null; } else if (token.equals("(")) return
681681 * expressionWithParentheses(); else { // error Error.printError(Main.language
682- * == Main.Language.JP ? "§–ñ‚É'('‚ª‚ ‚è‚Ü‚¹‚ñ" : "( expected in constraints"); return
682+ * == Main.Language.JP ? "制約に'('がありません" : "( expected in constraints"); return
683683 * null; } } catch (OutOfTokenStreamException e) {
684- * Error.printError(Main.language == Main.Language.JP ? "§–ñŽ®‚ÉŒë‚肪‚ ‚è‚Ü‚·" :
684+ * Error.printError(Main.language == Main.Language.JP ? "制約式に誤りがあります" :
685685 * "Invalid constraints"); return null; } }
686686 *
687687 * private Node expressionWithParentheses() throws OutOfTokenStreamException {
688- * Node res; // –ß‚è’l String token = t.getToken(); if (token.equals("(") == false)
688+ * Node res; // 戻り値 String token = t.getToken(); if (token.equals("(") == false)
689689 * { // error // this block is unreachable Error.printError(Main.language ==
690- * Main.Language.JP ? "§–ñ‚É'('‚ª‚ ‚è‚Ü‚¹‚ñ" : "( expected in constraints"); return
690+ * Main.Language.JP ? "制約に'('がありません" : "( expected in constraints"); return
691691 * null; } // expression :: (expression) if (t.peepToken() == null) throw new
692692 * OutOfTokenStreamException(); if (t.peepToken().equals("(")) res =
693693 * expressionWithParentheses(); else // otherwise res = expressionBody(); //
694694 * closed with ')' ? if (t.getToken().equals(")") == false) { // error
695- * Error.printError(Main.language == Main.Language.JP ? "§–ñ‚É')'‚ª‚ ‚è‚Ü‚¹‚ñ" :
695+ * Error.printError(Main.language == Main.Language.JP ? "制約に')'がありません" :
696696 * ") expected in constraints"); return null; } return res; }
697697 *
698698 * private Node expressionBody() throws OutOfTokenStreamException { //
699- * ‰‰ŽZŽq‚ÌŽŸ‚̃g[ƒNƒ“‚ª ( ‚© ‚Ç‚¤‚©‚Å”»’f // case 1: ( <> ( // case 2: ( <> [ foo, ( <> foo
699+ * 演算子の次のトークンが ( か どうかで判断 // case 1: ( <> ( // case 2: ( <> [ foo, ( <> foo
700700 * String token = t.peepNextToken(); if (token == null) throw new
701701 * OutOfTokenStreamException(); if (token.equals("(")) return boolExpression();
702702 * else return atomExpression(); }
@@ -750,10 +750,10 @@ class GTE extends RelationOverDoublePair {
750750 * parseExpression(); return res; }
751751 *
752752 * private Node atomExpression() throws OutOfTokenStreamException { //
753- * ŽŸ‚̃g[ƒNƒ“‚ðƒ`ƒFƒbƒN: ‰‰ŽZŽq‚Å‚È‚¢‚Æ‚¢‚¯‚È‚¢ String token = t.getToken(); if (token.equals("=="))
753+ * 次のトークンをチェック: 演算子でないといけない String token = t.getToken(); if (token.equals("=="))
754754 * return equalityAtomExpression(); else if (token.equals("<>")) return
755755 * inequalityAtomExpression(); else Error.printError(Main.language ==
756- * Main.Language.JP ? "§–ñŽ®‚É == ‚© <> ‚ª•K—v‚Å‚·" :
756+ * Main.Language.JP ? "制約式に == か <> が必要です" :
757757 * "== or <> expected in constraints"); return null; }
758758 *
759759 * private Node inequalityAtomExpression() throws OutOfTokenStreamException {
@@ -775,12 +775,12 @@ class GTE extends RelationOverDoublePair {
775775 * //case 2 if ((token1.equals("[") == false) && (token2.equals("[") == true)) {
776776 * val1 = t.getToken(); t.getToken(); // must be [ para1 = t.getToken(); if
777777 * (t.getToken().equals("]") == false) { Error.printError(Main.language ==
778- * Main.Language.JP ? "§–ñŽ®‚É]‚ª•K—v‚Å‚·" : "] expected in constraints"); } return
778+ * Main.Language.JP ? "制約式に]が必要です" : "] expected in constraints"); } return
779779 * compareParameterAndValue(para1, val1); }
780780 *
781781 * // case 3, 4 t.getToken(); // must be "[" para1 = t.getToken(); if
782782 * (t.getToken().equals("]") == false) { Error.printError(Main.language ==
783- * Main.Language.JP ? "§–ñŽ®‚É]‚ª•K—v‚Å‚·" : "] expected in constraints"); } token1 =
783+ * Main.Language.JP ? "制約式に]が必要です" : "] expected in constraints"); } token1 =
784784 * t.peepToken(); if (token1 == null) throw new OutOfTokenStreamException();
785785 *
786786 * // case 3 if (token1.equals("[") == false) { val1 = t.getToken(); return
@@ -788,41 +788,41 @@ class GTE extends RelationOverDoublePair {
788788 *
789789 * // case 4 t.getToken(); // must be [ para2 = t.getToken(); if
790790 * (t.getToken().equals("]") == false) { Error.printError(Main.language ==
791- * Main.Language.JP ? "§–ñŽ®‚É]‚ª•K—v‚Å‚·" : "] expected in constraints"); } return
791+ * Main.Language.JP ? "制約式に]が必要です" : "] expected in constraints"); } return
792792 * compareParameterAndParameter(para1, para2); }
793793 *
794794 * private Node compareValueAndValue(String val1, String val2) { if
795795 * (val1.equals(val2)) return new TrueValue(); else return new FalseValue(); }
796796 *
797797 * private Node compareParameterAndValue(String para, String val) { int
798- * parameterID = 0; Parameter p; int value = 0; // ˆöŽq–¼‚ª³‚µ‚¢‚©ƒ`ƒFƒbƒN try {
798+ * parameterID = 0; Parameter p; int value = 0; // 因子名が正しいかチェック try {
799799 * parameterID = parameterList.getID(para); } catch (NoParameterNameException e)
800- * { Error.printError(Main.language == Main.Language.JP ? "§–ñ’†‚̈öŽq–¼‚ÉŒë‚肪‚ ‚è‚Ü‚·" :
800+ * { Error.printError(Main.language == Main.Language.JP ? "制約中の因子名に誤りがあります" :
801801 * "Invalid parameter name in constraints"); } p =
802802 * parameterList.get(parameterID);
803803 *
804- * // ’l–¼‚ª³‚µ‚¢‚©ƒ`ƒFƒbƒN try { value = p.getID(val); } catch (NoValueNameException e) {
805- * Error.printError(Main.language == Main.Language.JP ? "§–ñ’†‚Ì’l–¼‚ÉŒë‚肪‚ ‚è‚Ü‚·" :
804+ * // 値名が正しいかチェック try { value = p.getID(val); } catch (NoValueNameException e) {
805+ * Error.printError(Main.language == Main.Language.JP ? "制約中の値名に誤りがあります" :
806806 * "Invalid parameter value in constraints"); }
807807 *
808808 * ComparisonOfParameterAndValue res = new EqualityOfParameterAndValue(); res.p
809809 * = parameterID; res.v = value; return res; }
810810 *
811811 * private Node compareParameterAndParameter(String para1, String para2) { int
812- * parameterID1 = 0; int parameterID2 = 0; Parameter p1, p2; // ˆöŽq–¼‚ª³‚µ‚¢‚©ƒ`ƒFƒbƒN try
812+ * parameterID1 = 0; int parameterID2 = 0; Parameter p1, p2; // 因子名が正しいかチェック try
813813 * { parameterID1 = parameterList.getID(para1); parameterID2 =
814814 * parameterList.getID(para2); } catch (NoParameterNameException e) {
815- * Error.printError(Main.language == Main.Language.JP ? "§–ñ’†‚̈öŽq–¼‚ÉŒë‚肪‚ ‚è‚Ü‚·" :
815+ * Error.printError(Main.language == Main.Language.JP ? "制約中の因子名に誤りがあります" :
816816 * "Invalid parameter name in constraints"); } p1 =
817817 * parameterList.get(parameterID1); p2 = parameterList.get(parameterID2);
818818 *
819819 * List<String> commonValueName = new ArrayList<String>(p1.value_name);
820820 * commonValueName.retainAll(p2.value_name);
821821 *
822- * // case 1: ’l–¼‚Å“¯‚¶‚à‚Ì‚ª‚È‚¢ if (commonValueName.size() == 0) return new
822+ * // case 1: 値名で同じものがない if (commonValueName.size() == 0) return new
823823 * FalseValue();
824824 *
825- * // case 2: ’l–¼‚Å“¯‚¶‚à‚Ì‚ª‚ЂƂ if (commonValueName.size() == 1) { String valueName =
825+ * // case 2: 値名で同じものがひとつ if (commonValueName.size() == 1) { String valueName =
826826 * commonValueName.get(0); BooleanMultinaryOperator res = new AndOperator();
827827 * ComparisonOfParameterAndValue sub1 = new EqualityOfParameterAndValue();
828828 * ComparisonOfParameterAndValue sub2 = new EqualityOfParameterAndValue(); try {
@@ -831,7 +831,7 @@ class GTE extends RelationOverDoublePair {
831831 * Error.printError("Inner error"); } res.ChildList.add(sub1);
832832 * res.ChildList.add(sub2); return res; }
833833 *
834- * // case 3: ’l–¼‚Å“¯‚¶‚à‚Ì‚ª2ŒÂˆÈã BooleanMultinaryOperator res = new OrOperator(); for
834+ * // case 3: 値名で同じものが2個以上 BooleanMultinaryOperator res = new OrOperator(); for
835835 * (String valueName: commonValueName) { BooleanMultinaryOperator child = new
836836 * AndOperator(); ComparisonOfParameterAndValue sub1 = new
837837 * EqualityOfParameterAndValue(); ComparisonOfParameterAndValue sub2 = new
--- a/src/main/java/v1/Testcase.java
+++ b/src/main/java/v1/Testcase.java
@@ -6,7 +6,7 @@ import java.io.IOException;
66 public class Testcase {
77 byte[] value; // 0..level-1, or <0 (wildcard)
88
9- // ‚±‚ê‚𑼂©‚ç“Ç‚ñ‚Å‚é‚Æ‚Ü‚¸‚¢‚©‚àH
9+ // これを他から読んでるとまずいかも?
1010 public Testcase(int n) {
1111 this.value = new byte[n];
1212 }
@@ -46,7 +46,7 @@ public class Testcase {
4646 System.err.println();
4747 }
4848
49- // TODO Outputer.java ‚Ɉړ®
49+ // TODO Outputer.java に移動
5050 void print(BufferedWriter writer, InputFileData inputfiledata)
5151 throws IOException {
5252 for (int i = 0; i < value.length; i++)
@@ -56,9 +56,9 @@ public class Testcase {
5656 writer.write("\n");
5757 }
5858
59- // tuple‚ðd‚Ë‚é
59+ // tupleを重ねる
6060 // return true if a tuple is superimposed
61- // d‚Ë‚½Žž‚É‹Ö‘¥‚Ɉᔽ‚·‚邱‚Æ‚ ‚è->ƒ`ƒFƒbƒN‚·‚é
61+ // 重ねた時に禁則に違反することあり->チェックする
6262 boolean superimpose(Testcase tuple, ConstraintHandler h) {
6363 Testcase tmp = this.makeClone();
6464 if (tmp.superimpose(tuple) == false)
@@ -69,9 +69,9 @@ public class Testcase {
6969 // must be true;
7070 }
7171
72- // tuple‚ðd‚Ë‚é
72+ // tupleを重ねる
7373 // return true if a tuple is superimposed
74- // d‚Ë‚½Žž‚É‹Ö‘¥‚Ɉᔽ‚·‚邱‚Æ‚ ‚è->ƒ`ƒFƒbƒN‚µ‚È‚¢
74+ // 重ねた時に禁則に違反することあり->チェックしない
7575 private boolean superimpose(Testcase tuple) {
7676 // TODO Auto-generated method stu
7777 for (int i = 0; i < value.length; i++) {
--- a/src/main/java/v1/TokenHandler.java
+++ b/src/main/java/v1/TokenHandler.java
@@ -10,7 +10,7 @@ public class TokenHandler {
1010 this.tokenList = tokenList;
1111 }
1212
13- // ŽŸ‚ÌToken ‚ðŽæ‚èo‚·
13+ // 次のToken を取り出す
1414 String getToken() throws OutOfTokenStreamException {
1515 if (index >= tokenList.size())
1616 throw new OutOfTokenStreamException();
@@ -18,14 +18,14 @@ public class TokenHandler {
1818 return str;
1919 }
2020
21- // ŽŸ‚ÌToken ‚ðŒ©‚éDŽæ‚èo‚³‚È‚¢
21+ // 次のToken を見る.取り出さない
2222 String peepToken() {
2323 if (index >= tokenList.size())
2424 return null;
2525 return tokenList.get(index);
2626 }
2727
28- // ŽŸ‚ÌŽŸ‚ÌToken ‚ðŒ©‚éDŽæ‚èo‚³‚È‚¢
28+ // 次の次のToken を見る.取り出さない
2929 String peepNextToken() {
3030 if (index + 1 >= tokenList.size())
3131 return null;