Files
secondo/OptParser/OptTest/30/OptTest.java
2026-01-23 17:03:45 +08:00

974 lines
41 KiB
Java

//This file is part of SECONDO.
//Copyright (C) 2004, University in Hagen, Department of Computer Science,
//Database Systems for New Applications.
//SECONDO is free software; you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation; either version 2 of the License, or
//(at your option) any later version.
//SECONDO is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
//along with SECONDO; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
import java.io.*;
import java.net.*;
import java.util.*;
import jpl.JPL;
import jpl.Atom;
import jpl.Query;
import jpl.Term;
import jpl.Variable;
import jpl.fli.*;
import jpl.Compound;
import jpl.Util;
import java.nio.charset.Charset;
import java.util.SortedMap;
public class OptTest {
static {
System.loadLibrary("jpl");
System.loadLibrary("regOptTest");
}
public static native int registerSecondo();
private String openedDatabase = "";
private String OS_pl_encoding = null;
static final int UNDEFINED = 0;
static final int SETUP = 1;
static final int TESTCASE = 2;
static final int TEARDOWN = 3;
// multiline commands
static final int APPENDTOCOMMAND = 4;
// special states for testcases
static final int AWAITINGYIELD = 1;
static final int AWAITINGCOMMAND = 2;
static final int NEXTCOMMAND = 5;
// flags for result comparison
static final int NOCOMPARE = 2;
static final int STRINGCOMPARE = 3;
static final int SQLRESULTCOMPARE = 4;
static final int OPTCOMPARE = 5;
String resultfilename = "result.log";
String auxiliarydest = "../../Optimizer/auxiliary";
String calloptimizerdest = "../../Optimizer/calloptimizer";
// globale Variables to have mutliple returnvalues
String Solution = "";
Hashtable[] solutions;
String summary = "\n\nThe result of the testfile : ";
/*
~parseTestfile~ takes a filename String which should be a testfile. It is opened
and processes it line
by line.
*/
private boolean parseTestfile(String testfilename) {
summary += testfilename;
summary += "\nThe following checks failed : \n";
String testresults = "";
String yield = "";
String testfile = readTestfile(testfilename);
if (testfile.isEmpty()) {
System.out
.println("Error : Testfile " + testfilename + " is empty");
return false;
}
// split does remove emptylines
String linebuffer[] = testfile.split("[\\r\\n]+");
int numberoflines = linebuffer.length;
System.out.println("Parsing " + numberoflines + " lines");
int state = UNDEFINED;
int testcasestate = UNDEFINED;
int setupstate = UNDEFINED;
String currentline = "";
String optcommand = "";
String testcasename = "";
int yieldflag = 0;
for (int lineno = 0; lineno < numberoflines; lineno++) {
currentline = linebuffer[lineno];
// filter out comments
if (currentline.startsWith("# ") || currentline.equals("#")
|| currentline.trim().isEmpty()) {
// System.out.println("ignoring Comment");
} else {
switch (state) {
case UNDEFINED:
if (currentline.startsWith("#setup")) {
state = SETUP;
if (currentline.trim().length() > 6) {
String testfilecomment = currentline.substring(6);
if (testfilecomment.length() > 0) {
System.out.println("Testfile name : "
+ testfilename);
System.out.println("Testfile description : "
+ testfilecomment.trim().substring(
testfilecomment.indexOf(" ")));
}
}
} else {
System.out
.println("Error: Expected #setup directive here");
return false;
}
break;
case SETUP:
if (currentline.startsWith("#testcase")) {
//System.out.println("INFO : changing state to TESTCASE");
state = TESTCASE;
testcasestate = AWAITINGYIELD;
System.out.println("Testcasename : "
+ currentline.trim().substring(
currentline.indexOf(" ")));
testcasename = currentline.substring(currentline
.indexOf(" "));
} else {
if (currentline.startsWith("#setup")) {
System.out
.println("Error : Already in SETUP state in line : "
+ (lineno + 1));
return false;
}
if (currentline.startsWith("#teardown")) {
System.out
.println("Error : Testfile changing from SETUP state to TEARDOWN is useless in line :"
+ (lineno + 1) + ".");
return false;
}
switch (setupstate) {
case UNDEFINED:
if (currentline.endsWith(";")) {
optcommand += currentline.substring(0,
currentline.length() - 1);
if (!execute(optcommand)) {
System.out
.println("Error: setup failed while executing :\n"
+ optcommand);
return false;
}
// reset optcommand
optcommand = "";
} else {
optcommand += currentline + " ";
//System.out.println("INFO : changing state to APPENDTOCOMMAND");
setupstate = APPENDTOCOMMAND;
}
break;
case APPENDTOCOMMAND:
if (currentline.endsWith(";")) {
optcommand += currentline;
if (!execute(optcommand)) {
System.out
.println("Error: setup failed while executing :\n"
+ optcommand);
return false;
}
optcommand = "";
break;
} else {
optcommand += currentline + " ";
}
}
}
break;
case TESTCASE:
/*
* example testcase:
* #testcase <testcasename>
* #yields <compareflag> <answer>|@filename
* <optimizer command>
*/
// catch statechange errors first
if (currentline.startsWith("#setup")) {
System.out
.println("Error : Testfile changing from TESTCASE state to SETUP which is not allowed in line : "
+ (lineno + 1) + ".");
return false;
}
// again statebased
switch (testcasestate) {
case UNDEFINED:
System.out
.println("Error : testcasestate cannot be undefined in line "
+ (lineno + 1) + ".");
return false;
case AWAITINGYIELD:
if (currentline.startsWith("#yields")) {
if (currentline.trim().length() > 7) {
// gets yieldflag
yield = currentline.substring(7).trim();
if (yield.indexOf(" ") != -1) {
yieldflag = Integer.parseInt(yield
.substring(0, yield.indexOf(" ")));
yield = yield.substring(yield.indexOf(" "),
yield.length()).trim();
// if there is yield make checks else pass
if (yield.length() > 0) {
if (yield.startsWith("@")) {
String yieldfilename = yield
.substring(1);
System.out.println("Reading file "
+ yieldfilename);
yield = readTestfile(yieldfilename);
}
}
} else {
yieldflag = STRINGCOMPARE;
}
} else {
yieldflag = NOCOMPARE;
yield = "";
}
//System.out.println("INFO : changing teststate to AWAITINGCOMMAND");
testcasestate = AWAITINGCOMMAND;
} else {
System.out
.println("Error : Missing #yields directive in line : "
+ (lineno + 1) + ".");
return false;
}
break;
case AWAITINGCOMMAND:
if (currentline.startsWith("#")) {
System.out
.println("Error : Directives not allowed, awaiting optimizer command: "
+ yield
+ " in line :"
+ (lineno + 1) + ".");
}
if (currentline.endsWith(";")) {
optcommand += currentline.substring(0,
currentline.length() - 1);
if (!executeTest(optcommand, yield, yieldflag)) {
System.out
.println("Error: Testcasecommand failed while executing :\n"
+ optcommand);
return false;
}
optcommand = "";
//System.out.println("INFO : changing teststate to NEXTCOMMAND");
testcasestate = NEXTCOMMAND;
} else {
optcommand = currentline + " ";
//System.out.println("INFO : changing teststate to APPENDTOCOMMAND");
testcasestate = APPENDTOCOMMAND;
}
break;
case APPENDTOCOMMAND:
if (currentline.startsWith("#")) {
System.out
.println("Error : Directives or comments are not allowed, was awaiting something to append to "
+ optcommand
+ " in line :"
+ (lineno + 1) + ".");
}
if (currentline.endsWith(";")) {
optcommand += currentline.substring(0,
currentline.length() - 1);
if (!executeTest(optcommand, yield, yieldflag)) {
System.out
.println("Error: Testcasecommand failed while executing :\n"
+ optcommand);
return false;
}
optcommand = "";
//System.out.println("INFO : changing teststate to NEXTCOMMAND");
testcasestate = NEXTCOMMAND;
} else {
optcommand += currentline + " ";
//System.out.println("INFO : changing teststate to APPENDTOCOMMAND");
testcasestate = APPENDTOCOMMAND;
}
break;
case NEXTCOMMAND:
optcommand = "";
if (currentline.startsWith("#testcase")) {
testcasename = currentline.substring(currentline
.indexOf(" "));
//System.out.println("Info : Changing state to TESTCASE.");
testcasestate = AWAITINGYIELD;
System.out.println();
System.out.println("Testcasename : "
+ currentline.trim().substring(
currentline.indexOf(" ")));
} else {
if (currentline.startsWith("#setup")) {
System.out
.println("Error : Already in SETUP state in line : "
+ (lineno + 1));
return false;
}
if (currentline.startsWith("#teardown")) {
//System.out.println("INFO : changing state to TEARDOWN");
state = TEARDOWN;
}
}
break;
}
break;
case TEARDOWN:
if (currentline.startsWith("#setup")) {
System.out
.println("Error : Testfile changing from TEARDOWN state to SETUP which is not allowed in line : "
+ lineno + ".");
return false;
}
if (currentline.startsWith("#testcase")) {
System.out
.println("Error : Testfile changing from TEARDOWN state to TESTCASE which is not allowed in line : "
+ lineno + ".");
return false;
}
if (currentline.endsWith(";")) {
optcommand += currentline.substring(0,
currentline.length() - 1);
if (!execute(optcommand)) {
System.out
.println("Error: setup failed while executing :\n"
+ optcommand);
return false;
}
optcommand = "";
} else {
optcommand += currentline + " ";
}
break;
}
}
}
System.out.println(summary);
if (state == TESTCASE || state == TEARDOWN)
return true;
else {
switch (state) {
case SETUP:
System.out
.println("testfile execution ended in illegal state SETUP");
return false;
case UNDEFINED:
System.out
.println("testfile execution ended in illegal state UNDEFINED");
return false;
}
}
return false;
}
/*
* yield from testfile or @resultfile
*
*/
private boolean executeTest(String optcommand, String yield, int flag) {
String result = "";
if (execute(optcommand)) {
if (solutions.length >= 0) {
for (int i = 0; i < solutions.length; i++) {
Hashtable sol = solutions[i];
if (sol.size() <= 0) {
} else {
Enumeration vars = solutions[i].keys();
int varnum = 0;
while (vars.hasMoreElements()) {
Object v = vars.nextElement();
result += (v + " = " + solutions[i].get(v));
}
result += "\n";
}
}
// if solution is "" then compare to Solution
if (result.equals("")) {
//System.out.println("SOLUTION WRITE OUTPUT:" + Solution);
if (!compareResult(Solution, yield, flag)) {
summary += "Results from " + optcommand
+ " did not match!!!\n";
}
} else {
//System.out.println("SOLUTION UNIFIED VARS:" + result);
if (!compareResult(result, yield, flag)) {
summary += "Results from " + optcommand
+ " did not match!!!\n";
}
}
} else {
// compare to false
if (compareResult("false", yield, flag)) {
summary += "Results from " + optcommand
+ " did not match!!!\n";
}
return true;
}
return true;
} else {
return false;
}
}
private String readTestfile(String filename) {
String line;
try {
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream(filename);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
// read file
String file = "";
while ((line = br.readLine()) != null) {
// Print the content on the console
// System.out.println(line);
file += line + "\n";
}
// close file
in.close();
// parsing the input as a whole takes place in a separate method
return file;
} catch (Exception e) {
System.out.println("could not open or read testfile : " + filename);
e.printStackTrace();
return "";
}
}
private boolean compareResult(String result, String yield, int flag) {
/*
System.out.println("CompareResult flag : " + flag);
System.out.println("___________________________________________");
System.out.println("Comparing result:\n" + result);
System.out.println("___________________________________________");
System.out.println("Comparing yield:\n" + yield);
System.out.println("++++++++++++++++++++++++++++++++++++++++++++");
*/
//force default heavior if none was set
if (flag == UNDEFINED) {
flag = STRINGCOMPARE;
}
switch (flag) {
case NOCOMPARE:
return true;
// compare incoming results char by char
case STRINGCOMPARE:
if (result.trim().contentEquals(yield.trim())) {
System.out.println("Info : results do match");
return true;
} else {
summary += "\n-------------- result : ---------------------\n";
summary += result;
summary += "\n-------------- given yield : ---------------------\n";
summary += yield;
System.out.println("Error : results do NOT match");
return false;
}
/* in SQLRESULTCOMPARE yield is compared starting from
"Command succeeded, result:"*/
case SQLRESULTCOMPARE:
if (result.length() > 0 && yield.length() > 0) {
if (result.indexOf("Command succeeded, result:") != -1) {
result = result.trim().substring(
result.indexOf("Command succeeded, result:"));
}
if (yield.indexOf("Command succeeded, result:") != -1) {
yield = yield.trim().substring(
yield.indexOf("Command succeeded, result:"));
}
if (result.trim().contentEquals(yield.trim())) {
System.out.println("Info : results do match");
return true;
} else {
System.out.println("Error : results do NOT match");
summary += "\n-------------- result : ---------------------\n";
summary += result;
summary += "\n-------------- given yield : ---------------------\n";
summary += yield;
return false;
}
} else {
System.out.println("Error : results do NOT match");
return false;
}
// in OPTCOMPARE all the selectivities are being removed
case OPTCOMPARE:
String pattern = "\\{.*\\}";
result = result.replaceAll(pattern, "");
yield = result.replaceAll(pattern, "");
if (result.trim().contentEquals(yield.trim())) {
System.out.println("Info : results do match");
return true;
} else {
System.out.println("Error : results do NOT match");
summary += "\n-------------- result : ---------------------\n";
summary += result;
summary += "\n-------------- given yield : ---------------------\n";
summary += yield;
summary += "\n-----------------------------------------------------------\n";
return false;
}
}
System.out.print("Error check failed somehow");
return false;
}
private boolean createTestfile(String filename) {
String commandlist = readTestfile(filename);
if (commandlist.isEmpty()) {
System.out.println("Error : Testfile " + commandlist + " is empty");
return false;
}
// split does remove emptylines
String linebuffer[] = commandlist.split("[\\r\\n]+");
int numberoflines = linebuffer.length;
String currentline = "";
int state = SETUP;
System.out.println("analyzing " + numberoflines + " lines from "
+ filename);
String resultfile = "";
String testname = "";
if (filename.indexOf(".") != -1) {
testname = filename.substring(0, filename.indexOf("."));
} else {
testname = filename;
}
String testfile = "# This is a by OptTest automatically generated testfile.\n"
+ "# It was generated from file: "
+ filename
+ "\n"
+ "#setup " + testname + "\n";
int testno = 0;
String optcommand = "";
String description = "";
for (int lineno = 0; lineno < numberoflines; lineno++) {
currentline = linebuffer[lineno];
if (currentline.startsWith("# ") || currentline.equals("#")
|| currentline.trim().isEmpty()) {
// System.out.println("ignoring Comment");
} else {
switch (state) {
case SETUP:
if (currentline.trim().startsWith("#testcase")) {
state = TESTCASE;
//System.out.println("changing state to TESTCASE");
} else {
if (currentline.endsWith(";")) {
optcommand += currentline.substring(0,
currentline.length() - 1);
if (execute(optcommand)) {
//DisplaySolutions();
testfile += optcommand + ";\n";
optcommand = "";
} else {
System.out
.println("Error : setup section failed due to error ");
return false;
}
} else {
optcommand += currentline + " ";
}
}
break;
case TESTCASE:
if (currentline.startsWith("#teardown")) {
testfile += "#teardown\n";
state = TEARDOWN;
} else {
if (currentline.endsWith(";")) {
optcommand += currentline.substring(0,
currentline.length() - 1)
+ "\n";
if (execute(optcommand)) {
resultfile = "";
testno++;
testfile += "#testcase No" + testno + " "
+ description + "\n";
String result = "";
if (solutions.length > 0) {
for (int i = 0; i < solutions.length; i++) {
Hashtable sol = solutions[i];
if (sol.size() <= 0) {
} else {
Enumeration vars = solutions[i]
.keys();
int varnum = 0;
while (vars.hasMoreElements()) {
Object v = vars.nextElement();
result += (v + " = " + solutions[i]
.get(v));
}
result += "\n";
}
}
if (result.equals("")) {
result = Solution;
} else {
System.out.println("solutions : "
+ result);
}
int comparemode = STRINGCOMPARE;
if (optcommand.trim().startsWith("sql select")) {
comparemode = SQLRESULTCOMPARE;
}
if (optcommand.trim()
.startsWith("optimize")) {
comparemode = OPTCOMPARE;
}
if (result.length() > 70) {
resultfile = result;
String rfilename = testname + "_No"
+ testno + ".result";
// testcase distinction
testfile += "#yields " + comparemode
+ " @" + rfilename + "\n";
try {
FileWriter rstream = new FileWriter(
rfilename);
BufferedWriter rout = new BufferedWriter(
rstream);
rout.write(resultfile);
//Close the output stream
rout.close();
} catch (IOException e) {
}
} else {
testfile += "#yields " + comparemode
+ " " + result;
}
} else {
testfile += "#yields false\n";
}
testfile += optcommand.substring(0,
optcommand.length() - 1)
+ ";\n\n";
optcommand = "";
description = "";
} else {
System.out
.println("Error : creating testfile failed while executing : "
+ optcommand);
return false;
}
} else {
if (currentline.startsWith("% ")
|| currentline.startsWith("# ")) {
testfile += "# "
+ currentline.substring(1).trim()
+ "\n";
} else {
optcommand += currentline + "\n";
}
}
}
break;
case TEARDOWN:
if (currentline.endsWith(";")) {
optcommand += currentline.substring(0,
currentline.length() - 1);
if (execute(optcommand)) {
//DisplaySolutions();
testfile += optcommand + ";\n";
optcommand = "";
} else {
System.out
.println("Error : setup section failed due to error ");
return false;
}
} else {
optcommand += currentline + " ";
}
break;
}
}
}
try {
String tfilename = filename.substring(0, filename.indexOf("."))
+ ".test";
FileWriter tstream = new FileWriter(tfilename);
BufferedWriter tout = new BufferedWriter(tstream);
tout.write(testfile);
//Close the output stream
tout.close();
return true;
} catch (IOException e) {
System.out.println(e.getMessage());
return false;
}
}
/**
* init prolog register the secondo predicate loads the optimizer prolog
* code
*/
private boolean initialize() {
// later here is to invoke the init function which
// registers the Secondo(command,Result) predicate to prolog
if (registerSecondo() != 0) {
System.err.println("error in registering the secondo predicate ");
return false;
}
// cout.println("registerSecondo successful");
try {
String[] plargs = { "-L256M", "-G256M" };
boolean ok = JPL.init(plargs);
// VTA - 18.09.2006
// I added this piece of code in order to run with newer versions
// of prolog. Without this code, the libraries (e.g. lists.pl) are
// not automatically loaded. It seems that something in our code
// (auxiliary.pl and calloptimizer.pl) prevents them to be
// automatically loaded. In order to solve this problem I added
// a call to 'member(x, [x]).' so that the libraries are loaded
// before running our scripts.
Term[] args = new Term[2];
args[0] = new Atom("x");
args[1] = jpl.Util.termArrayToList(new Term[] { new Atom("x") });
Query q = new Query("member", args);
if (!q.hasSolution()) {
System.out.println("error in the member call'");
return false;
}
args = new Term[1];
args[0] = new Atom(auxiliarydest);
q = new Query("consult", args);
if (!q.hasSolution()) {
System.out.println("error in loading 'auxiliary.pl'");
return false;
}
args = new Term[1];
args[0] = new Atom(calloptimizerdest);
q = new Query("consult", args);
if (!q.hasSolution()) {
System.out.println("error in loading 'calloptimizer.pl'");
return false;
}
q = new Query("set_prolog_flag(debug_on_error, false)");
if (!q.hasSolution()) {
System.out.println("error setting debug_on_error to false");
return false;
}
return true;
} catch (Exception e) {
System.out.println("Exception in initialization " + e);
return false;
}
}
/**
* analyzed the given string and extract the command and the argumentlist <br>
* then the given command is executed all Solutions are stored into the
* Vector Solution
*/
private boolean execute(String command) {
if (Solution != "") {
Solution = "";
}
if (solutions != null) {
solutions = null;
}
command = command.trim();
System.out.println("Optimizer command: " + command);
command = "tell('" + resultfilename + "')," + command + ",told";
command = encode(command);
//System.out.println("Command to execute : " + command);
try {
Query pl_query = new Query(command);
if (pl_query == null) {
System.out.println("Error : error in parsing command: ");
return false;
}
solutions = pl_query.allSolutions();
/* debug */
//System.out.println("Number of solutions : " + solutions.length);
//System.out.println("");
/* end debug */
if (solutions.length > 0) {
Solution = readTestfile(resultfilename);
//System.out.println("File Solution : " + Solution);
return true;
} else {
Solution = "false";
return true;
}
} catch (Exception e) {
return false;
}
}
private void DisplaySolutions() {
System.out.println("Display Solutions");
System.out.println("Solution : " + Solution);
String result = "";
for (int i = 0; i > solutions.length; i++) {
Hashtable solution = solutions[i];
Enumeration vars = solution.keys();
int varnum = 0;
while (vars.hasMoreElements()) {
Object v = vars.nextElement();
result += (v + " = " + solution.get(v));
}
}
System.out.println("+++++++++++++++++");
System.out.println("result :" + result);
System.out.println("?????????????????");
}
/*
private String readFile(String file) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
return stringBuilder.toString();
} catch (IOException e) {
System.out.println(e.getStackTrace());
System.out.println("Could not open or read " + file);
return "";
}
}
*/
/** Converts a string into OS_pl_encoding **/
private String encode(String src) {
if (OS_pl_encoding == null) {
return src;
}
try {
byte[] encodedBytes = src.getBytes(OS_pl_encoding);
return new String(encodedBytes, "UTF-8");
} catch (Exception e) {
System.err.println("Used encoding not supported\n" + e);
return src;
}
}
/** Converts a string from OS_pl_encoding **/
private String decode(String src) {
if (OS_pl_encoding == null) {
return src;
}
try {
byte[] encodedBytes = src.getBytes("UTF-8");
return new String(encodedBytes, OS_pl_encoding);
} catch (Exception e) {
System.err.println("Used encoding not supported\n" + e);
return src;
}
}
public static void main(String[] args) {
OptTest opttest = new OptTest();
if (args.length == 1) {
try {
Class.forName("jpl.fli.Prolog"); // ensure to load the jpl library
} catch (Exception e) {
System.err.println("loading prolog class failed");
System.exit(1);
}
if (!opttest.initialize()) {
System.out.println("initialization failed");
System.exit(1);
}
System.out.println("Testfile : " + args[0]);
System.out.println(opttest.parseTestfile(args[0]));
/*
opttest.execute("current_prolog_flag(debug_on_error, X)");
opttest.execute("set_prolog_flag(debug_on_error, false)");
opttest.execute("current_prolog_flag(debug_on_error, X)");
opttest.execute("open database opt");
//opttest.execute("tell('" + opttest.resultfilename + "')");
String command = "sqdsdxl select count(*) from orte";
opttest.execute("tell('" + opttest.resultfilename + "')," + command
+ ",told");
command = "sql select * from orte";
opttest.execute("tell('" + opttest.resultfilename + "')," + command + ",told");
command = "sql select bevt from orte";
opttest.execute("tell('" + opttest.resultfilename + "')," + command + ",told");
command = "optimize(select bevt from orte where [bevt < 100 ,bevt > 50])";
opttest.execute("tell('" + opttest.resultfilename + "')," + command + ",told");
*/
//opttest.execute("sql select * from plz");
//opttest.execute("told");
} else {
if (args.length == 2) {
System.out.println("args.length == 2, arg[1] =" + args[1]);
if (args[0].equals("-c")) {
try {
Class.forName("jpl.fli.Prolog"); // ensure to load the jpl library
} catch (Exception e) {
System.err.println("loading prolog class failed");
System.exit(1);
}
if (!opttest.initialize()) {
System.out.println("initialization failed");
System.exit(1);
}
System.out.println("Creating testfile from " + args[1]);
if (opttest.createTestfile(args[1])) {
System.out.println("creating testfile successful");
} else {
System.out.println("creating testfile failed");
}
}
} else {
System.out
.println("OptTest \n Usage : \n "
+ "execute testfile : \n OptTest <testfilename>\n"
+ "create testfile from commands: \n OptTest -c <testfilename>\n");
}
}
}
}