001: /*
002: * Copyright (C) 1999-2004 <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</a>
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */
018: package test.org.mandarax.performance;
019:
020: import java.io.FileOutputStream;
021: import java.io.PrintStream;
022:
023: import org.apache.log4j.BasicConfigurator;
024: import org.apache.log4j.Category;
025: import org.apache.log4j.Level;
026: import org.mandarax.kernel.InferenceEngine;
027: import org.mandarax.reference.ResolutionInferenceEngine;
028: import org.mandarax.reference.ResolutionInferenceEngine2;
029: import org.mandarax.reference.ResolutionInferenceEngine3;
030: import org.mandarax.reference.ResolutionInferenceEngine4;
031:
032: /**
033: * Executable performance test suite that writes data in a CSV file.
034: * @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
035: * @version 3.4 <7 March 05>
036: * @since 2.1
037: */
038: public class PerformanceTestSuite {
039: public static final String SEP = ",";
040: public static final int REPEAT_TESTS = 5;
041:
042: /**
043: * Get the inference engines to be tested.
044: * @return an array of inference engines.
045: */
046: public static InferenceEngine[] getIEs() {
047: return new InferenceEngine[] { new ResolutionInferenceEngine(),
048: new ResolutionInferenceEngine2(),
049: new ResolutionInferenceEngine3(),
050: new ResolutionInferenceEngine4() };
051: }
052:
053: /**
054: * Get the output stream where to write results.
055: * @return an output stream
056: */
057: public static PrintStream getOut4Statistics() {
058:
059: try {
060: return new PrintStream(new FileOutputStream(
061: "performance.csv"));
062: } catch (Exception x) {
063: x.printStackTrace();
064: return System.out;
065: }
066: }
067:
068: /**
069: * Get the performance tests to run.
070: * @return an output stream
071: */
072: public static PerformanceTest[] getTests() {
073: return new PerformanceTest[] { new PerformanceTest1(4),
074: new PerformanceTest1(8) };
075: }
076:
077: /**
078: * Run a performance test.
079: */
080: public static void main(String args[]) {
081: BasicConfigurator.configure();
082: Category.getRoot().setLevel(Level.WARN);
083: InferenceEngine[] IEs = getIEs();
084: PrintStream out = getOut4Statistics();
085: out.println("IE CLASS" + SEP + "test" + SEP + "cardinality"
086: + SEP + "log" + SEP + "kb depth" + SEP + "kb size"
087: + SEP + "results" + SEP + "time");
088: // one result
089: for (int i = 0; i < IEs.length; i++) {
090: for (int k = 0; k < REPEAT_TESTS; k++) {
091: PerformanceTest[] tests = getTests();
092: for (int j = 0; j < tests.length; j++) {
093: //runAndLog(tests[j],IEs[i],true,true,out);
094: runAndLog(tests[j], IEs[i], true, false, out);
095: }
096: }
097: }
098: // all results
099: for (int i = 0; i < IEs.length; i++) {
100: for (int k = 0; k < REPEAT_TESTS; k++) {
101: PerformanceTest[] tests = getTests();
102: if (!(IEs[i] instanceof ResolutionInferenceEngine)) {
103: for (int j = 0; j < tests.length; j++) {
104: //runAndLog(tests[j],IEs[i],false,true,out);
105: runAndLog(tests[j], IEs[i], false, false, out);
106: }
107: }
108: }
109: }
110: out.close();
111: System.out.println("performance test suite done");
112: System.exit(0);
113: }
114:
115: /**
116: * Run the performance test and add entry to csv.
117: */
118: private static void runAndLog(PerformanceTest test,
119: InferenceEngine ie, boolean one, boolean log,
120: PrintStream out) {
121: test.run(ie, one, log, System.out);
122: out.print(ie.getClass().getName());
123: out.print(SEP);
124: out.print(test);
125: out.print(SEP);
126: out.print(one ? "one result" : "all results");
127: out.print(SEP);
128: out.print(log ? "on" : "off");
129: out.print(SEP);
130: out.print(test.getDepth());
131: out.print(SEP);
132: out.print(test.getKBSize());
133: out.print(SEP);
134: out.print(test.getNumberOfResults());
135: out.print(SEP);
136: out.print(test.getTime());
137: out.println();
138: test.release();
139:
140: }
141: }
|