You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by do...@apache.org on 2007/03/23 00:13:50 UTC
svn commit: r521526 - in /lucene/java/trunk: ./ contrib/benchmark/
contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/
contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/
contrib/benchmark/src/test/ contrib/benchmark/src/tes...
Author: doronc
Date: Thu Mar 22 16:13:48 2007
New Revision: 521526
URL: http://svn.apache.org/viewvc?view=rev&rev=521526
Log:
LUCENE-840: benchmarking code correctness tests were added.
Added:
lucene/java/trunk/contrib/benchmark/src/test/
lucene/java/trunk/contrib/benchmark/src/test/org/
lucene/java/trunk/contrib/benchmark/src/test/org/apache/
lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/
lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/
lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/
lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java (with props)
lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksParse.java (with props)
lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/
lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CountingSearchTestTask.java (with props)
Modified:
lucene/java/trunk/common-build.xml
lucene/java/trunk/contrib/benchmark/CHANGES.txt
lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/Benchmark.java
lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Algorithm.java
lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java
Modified: lucene/java/trunk/common-build.xml
URL: http://svn.apache.org/viewvc/lucene/java/trunk/common-build.xml?view=diff&rev=521526&r1=521525&r2=521526
==============================================================================
--- lucene/java/trunk/common-build.xml (original)
+++ lucene/java/trunk/common-build.xml Thu Mar 22 16:13:48 2007
@@ -194,6 +194,9 @@
<sysproperty key="docs.dir" file="src/test"/>
<sysproperty key="index.dir" file="${build.dir}/test/index"/>
+ <!-- contrib/benchmark uses this system property to locate defined tasks -->
+ <sysproperty key="tasks.dir" file="${build.dir}/classes/java/org/apache/lucene/benchmark/byTask/tasks"/>
+
<formatter type="xml"/>
<formatter type="brief" usefile="false"/>
<batchtest fork="yes" todir="${junit.output.dir}" unless="testcase">
Modified: lucene/java/trunk/contrib/benchmark/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/CHANGES.txt?view=diff&rev=521526&r1=521525&r2=521526
==============================================================================
--- lucene/java/trunk/contrib/benchmark/CHANGES.txt (original)
+++ lucene/java/trunk/contrib/benchmark/CHANGES.txt Thu Mar 22 16:13:48 2007
@@ -4,6 +4,11 @@
$Id:$
+3/21/07
+
+Tests (for benchmarking code correctness) were added - LUCENE-840.
+To be invoked by "ant test" from contrib/benchmark. (Doron Cohen)
+
3/19/07
1. Introduced an AbstractQueryMaker to hold common QueryMaker code. (GSI)
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/Benchmark.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/Benchmark.java?view=diff&rev=521526&r1=521525&r2=521526
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/Benchmark.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/Benchmark.java Thu Mar 22 16:13:48 2007
@@ -18,6 +18,8 @@
*/
import java.io.File;
+import java.io.FileReader;
+import java.io.Reader;
import org.apache.lucene.benchmark.byTask.utils.Algorithm;
import org.apache.lucene.benchmark.byTask.utils.Config;
@@ -37,11 +39,38 @@
* <li>TODO - perf report adequate to include in Lucene nightly build site? (so we can easily track performance changes.)</li>
* <li>TODO - add overall time control for repeated execution (vs. current by-count only).</li>
* <li>TODO - query maker that is based on index statistics.</li>
- * <li>TODO - prpoerties documentation - each task should document the properties it relies on.</li>
* </ol>
*/
public class Benchmark {
+ private PerfRunData runData;
+ private Algorithm algorithm;
+ private boolean executed;
+
+ public Benchmark (Reader algReader) throws Exception {
+ // prepare run data
+ try {
+ runData = new PerfRunData(new Config(algReader));
+ } catch (Exception e) {
+ throw new Exception("Error: cannot init PerfRunData!",e);
+ }
+
+ // parse algorithm
+ try {
+ algorithm = new Algorithm(runData);
+ } catch (Exception e) {
+ throw new Exception("Error: cannot understand algorithm!",e);
+ }
+ }
+
+ public synchronized void execute() throws Exception {
+ if (executed) {
+ throw new Exception("Benchmark was already executed");
+ }
+ executed = true;
+ algorithm.execute();
+ }
+
/**
* Run the benchmark algorithm.
* @param args benchmark config and algorithm files
@@ -60,32 +89,22 @@
System.exit(1);
}
- // last preparations
- PerfRunData runData = null;
- try {
- runData = new PerfRunData(new Config(algFile));
- } catch (Exception e) {
- System.err.println("Error: cannot init PerfRunData: "+e.getMessage());
- e.printStackTrace();
- System.exit(1);
- }
+ System.out.println("Running algorithm from: "+algFile.getAbsolutePath());
- // parse algorithm
- Algorithm algorithm = null;
+ Benchmark benchmark = null;
try {
- algorithm = new Algorithm(runData);
+ benchmark = new Benchmark(new FileReader(algFile));
} catch (Exception e) {
- System.err.println("Error: cannot understand algorithm from file: "+algFile.getAbsolutePath());
e.printStackTrace();
System.exit(1);
}
System.out.println("------------> algorithm:");
- System.out.println(algorithm.toString());
+ System.out.println(benchmark.getAlgorithm().toString());
// execute
try {
- algorithm.execute();
+ benchmark.execute();
} catch (Exception e) {
System.err.println("Error: cannot execute the algorithm! "+e.getMessage());
e.printStackTrace();
@@ -95,6 +114,20 @@
System.out.println("### D O N E !!! ###");
System.out.println("####################");
+ }
+
+ /**
+ * @return Returns the algorithm.
+ */
+ public Algorithm getAlgorithm() {
+ return algorithm;
+ }
+
+ /**
+ * @return Returns the runData.
+ */
+ public PerfRunData getRunData() {
+ return runData;
}
}
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Algorithm.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Algorithm.java?view=diff&rev=521526&r1=521525&r2=521526
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Algorithm.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Algorithm.java Thu Mar 22 16:13:48 2007
@@ -223,7 +223,32 @@
public void execute() throws Exception {
sequence.doLogic();
}
-
+
+ /**
+ * Expert: for test purposes, return all tasks participating in this algorithm.
+ * @return all tasks participating in this algorithm.
+ */
+ public ArrayList extractTasks() {
+ ArrayList res = new ArrayList();
+ extractTasks(res, sequence);
+ return res;
+ }
+ private void extractTasks (ArrayList extrct, TaskSequence seq) {
+ if (seq==null)
+ return;
+ extrct.add(seq);
+ ArrayList t = sequence.getTasks();
+ if (t==null)
+ return;
+ for (int i = 0; i < t.size(); i++) {
+ PerfTask p = (PerfTask) t.get(0);
+ if (p instanceof TaskSequence) {
+ extractTasks(extrct, (TaskSequence)p);
+ } else {
+ extrct.add(p);
+ }
+ }
+ }
}
Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java?view=diff&rev=521526&r1=521525&r2=521526
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java Thu Mar 22 16:13:48 2007
@@ -19,9 +19,8 @@
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileReader;
import java.io.IOException;
+import java.io.Reader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -49,10 +48,10 @@
* @param algFile file containing both algorithm and config properties.
* @throws IOException
*/
- public Config (File algFile) throws IOException {
+ public Config (Reader algReader) throws IOException {
// read alg file to array of lines
ArrayList lines = new ArrayList();
- BufferedReader r = new BufferedReader(new FileReader(algFile));
+ BufferedReader r = new BufferedReader(algReader);
int lastConfigLine=0;
for (String line = r.readLine(); line!=null; line=r.readLine()) {
lines.add(line);
Added: lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java?view=auto&rev=521526
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java (added)
+++ lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java Thu Mar 22 16:13:48 2007
@@ -0,0 +1,113 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.lucene.benchmark.byTask;
+
+import java.io.StringReader;
+
+import org.apache.lucene.benchmark.byTask.Benchmark;
+import org.apache.lucene.benchmark.byTask.tasks.CountingSearchTestTask;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+
+import junit.framework.TestCase;
+
+/**
+ * Test very simply that perf tasks - simple algorithms - are doing what they should.
+ */
+public class TestPerfTasksLogic extends TestCase {
+
+ private static final boolean DEBUG = false;
+ static final String NEW_LINE = System.getProperty("line.separator");
+
+ // properties in effect in all tests here
+ static final String propLines [] = {
+ "directory=RAMDirectory",
+ "print.props=false",
+ };
+
+ /**
+ * @param name test name
+ */
+ public TestPerfTasksLogic(String name) {
+ super(name);
+ }
+
+ /**
+ * Test index creation logic
+ */
+ public void testIndexAndSearchTasks() throws Exception {
+ // 1. alg definition (required in every "logic" test)
+ String algLines[] = {
+ "ResetSystemErase",
+ "CreateIndex",
+ "{ AddDoc } : 1000",
+ "Optimize",
+ "CloseIndex",
+ "OpenReader",
+ "{ CountingSearchTest } : 200",
+ "CloseReader",
+ "[ CountingSearchTest > : 70",
+ "[ CountingSearchTest > : 9",
+ };
+
+ // 2. we test this value later
+ CountingSearchTestTask.numSearches = 0;
+
+ // 3. execute the algorithm (required in every "logic" test)
+ Benchmark benchmark = execBenchmark(algLines);
+
+ // 4. test specific checks after the benchmark run completed.
+ assertEquals("TestSearchTask was supposed to be called!",279,CountingSearchTestTask.numSearches);
+ assertTrue("Index does not exist?...!", IndexReader.indexExists(benchmark.getRunData().getDirectory()));
+ // now we should be able to open the index for write.
+ IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(),null,false);
+ iw.close();
+ IndexReader ir = IndexReader.open(benchmark.getRunData().getDirectory());
+ assertEquals("1000 docs were added to the index, this is what we expect to find!",1000,ir.numDocs());
+ }
+
+ // create the benchmark and execute it.
+ private Benchmark execBenchmark(String[] algLines) throws Exception {
+ String algText = algLinesToText(algLines);
+ logTstLogic(algText);
+ Benchmark benchmark = new Benchmark(new StringReader(algText));
+ benchmark.execute();
+ return benchmark;
+ }
+
+ // catenate alg lines to make the alg text
+ private String algLinesToText(String[] algLines) {
+ String indent = " ";
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < propLines.length; i++) {
+ sb.append(indent).append(propLines[i]).append(NEW_LINE);
+ }
+ for (int i = 0; i < algLines.length; i++) {
+ sb.append(indent).append(algLines[i]).append(NEW_LINE);
+ }
+ return sb.toString();
+ }
+
+ private void logTstLogic (String txt) {
+ if (!DEBUG)
+ return;
+ System.out.println("Test logic of:");
+ System.out.println(txt);
+ }
+
+}
Propchange: lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java
------------------------------------------------------------------------------
svn:executable = *
Added: lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksParse.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksParse.java?view=auto&rev=521526
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksParse.java (added)
+++ lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksParse.java Thu Mar 22 16:13:48 2007
@@ -0,0 +1,251 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.lucene.benchmark.byTask;
+
+import java.io.File;
+import java.io.StringReader;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.apache.lucene.benchmark.byTask.tasks.PerfTask;
+import org.apache.lucene.benchmark.byTask.tasks.TaskSequence;
+import org.apache.lucene.benchmark.byTask.utils.Algorithm;
+
+import junit.framework.TestCase;
+
+/**
+ * Test very simply that perf tasks are parses as expected.
+ */
+public class TestPerfTasksParse extends TestCase {
+
+ private static final boolean DEBUG = false;
+ static final String NEW_LINE = System.getProperty("line.separator");
+ static final String INDENT = " ";
+
+ // properties in effect in all tests here
+ static final String propPart =
+ INDENT+"directory=RAMDirectory" + NEW_LINE +
+ INDENT+"print.props=false" + NEW_LINE
+ ;
+
+ /*
+ * All known tasks.
+ * As new tasks are added, add them here.
+ * It would be nice to do that automatically, unfortunately
+ * Java does not provide a "get all classes in package" or
+ * "get all sub-classes" functionality.
+ */
+ static String singleTaskAlgs [];
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ if (singleTaskAlgs==null) {
+ singleTaskAlgs = findTasks();
+ }
+ }
+
+ // one time initialization
+ static String [] findTasks () throws Exception {
+ ArrayList tsks = new ArrayList();
+ // init with tasks we know about
+ tsks.add( " AddDoc " );
+ tsks.add( " AddDoc(1000.0) " );
+ tsks.add( " ClearStats " );
+ tsks.add( " CloseIndex " );
+ tsks.add( " CloseReader " );
+ tsks.add( " CreateIndex " );
+ tsks.add( " DeleteDoc " );
+ tsks.add( " DeleteDoc(500.0) " );
+ tsks.add( " NewRound " );
+ tsks.add( " OpenIndex " );
+ tsks.add( " OpenReader " );
+ tsks.add( " Optimize " );
+ tsks.add( " RepAll " );
+ tsks.add( " RepSelectByPref prefix " );
+ tsks.add( " RepSumByNameRound " );
+ tsks.add( " RepSumByName " );
+ tsks.add( " RepSumByPrefRound prefix " );
+ tsks.add( " RepSumByPref prefix " );
+ tsks.add( " ResetInputs " );
+ tsks.add( " ResetSystemErase " );
+ tsks.add( " ResetSystemSoft " );
+ tsks.add( " Search " );
+ tsks.add( " SearchTravRet " );
+ tsks.add( " SearchTravRet(100.0) " );
+ tsks.add( " SearchTrav " );
+ tsks.add( " SearchTrav(50.0) " );
+ tsks.add( " SetProp " );
+ tsks.add( " SetProp(name,value) " );
+ tsks.add( " Warm " );
+
+ // if tasks.dir property is defined, look for additional tasks.
+ // this somewhat covers tasks that would be added in the future, in case
+ // the list above is not updated to cover them.
+ // some tasks would be tested more than once this way, but that's ok.
+ String tasksDir = System.getProperty("tasks.dir");
+ if (tasksDir !=null) {
+ String pkgPrefix = PerfTask.class.getPackage().getName()+".";
+ String taskNames[] = new File(tasksDir).list();
+ for (int i = 0; i < taskNames.length; i++) {
+ String name = taskNames[i].trim();
+ if (!name.endsWith("Task.class"))
+ continue; // Task class file only
+ name = name.substring(0,name.length()-6);
+ Class cls = Class.forName(pkgPrefix+name);
+ if (Modifier.isAbstract(cls.getModifiers()) || Modifier.isInterface(cls.getModifiers()))
+ continue; // skip sbstract classes
+ if (!PerfTask.class.isAssignableFrom(cls))
+ continue; // not a task
+ name = name.substring(0,name.length()-4);
+ if (name.startsWith("Rep") && name.indexOf("Pref")>=0)
+ name += " prefix";
+ tsks.add(" "+name+" ");
+ }
+ }
+ return (String[]) tsks.toArray(new String[0]);
+ }
+
+
+ /**
+ * @param name test name
+ */
+ public TestPerfTasksParse(String name) {
+ super(name);
+ }
+
+ /**
+ * Test the parsing of very simple tasks, for all tasks
+ */
+ public void testAllTasksSimpleParse() {
+ doTestAllTasksSimpleParse(false,false);
+ }
+
+ /**
+ * Test the parsing of simple sequential sequences, for all tasks
+ */
+ public void testAllTasksSimpleParseSequntial() {
+ doTestAllTasksSimpleParse(true,false);
+ }
+
+ /**
+ * Test the parsing of simple parallel sequences, for all tasks
+ */
+ public void testAllTasksSimpleParseParallel() {
+ doTestAllTasksSimpleParse(true,true);
+ }
+
+ // utility for simple parsing testing of all tasks.
+ private void doTestAllTasksSimpleParse(boolean parOrSeq, boolean par) {
+ for (int i = 0; i < singleTaskAlgs.length; i++) {
+ String testedTask = singleTaskAlgs[i];
+ if (parOrSeq) {
+ if (par) {
+ testedTask = "[ " + testedTask + " ] : 2";
+ } else {
+ testedTask = "{ " + testedTask + " } : 3";
+ }
+ }
+ try {
+ String algText = propPart+INDENT+testedTask;
+ logTstParsing(algText);
+ Benchmark benchmark = new Benchmark(new StringReader(algText));
+ Algorithm alg = benchmark.getAlgorithm();
+ ArrayList algTasks = alg.extractTasks();
+ // must find a task with this name in the algorithm
+ boolean foundName = false;
+ boolean foundPar = false;
+ String theTask = singleTaskAlgs[i].replaceAll(" +"," ").trim();
+ for (Iterator iter = algTasks.iterator(); iter.hasNext();) {
+ PerfTask task = (PerfTask) iter.next();
+ foundName |= (task.toString().indexOf(theTask)>=0);
+ foundPar |= (task instanceof TaskSequence && ((TaskSequence)task).isParallel());
+ }
+ assertTrue("Task "+testedTask+" was not found in "+alg.toString(),foundName);
+ if (parOrSeq) {
+ if (par) {
+ assertTrue("Task "+testedTask+" was supposed to be parallel in "+alg.toString(),foundPar);
+ } else {
+ assertFalse("Task "+testedTask+" was not supposed to be parallel in "+alg.toString(),foundPar);
+ }
+ }
+ } catch (Exception e) {
+ System.out.flush();
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+ }
+
+ /**
+ * Test the repetiotion parsing for parallel tasks
+ */
+ public void testParseParallelTaskSequenceRepetition() throws Exception {
+ String taskStr = "AddDoc";
+ String parsedTasks = "[ "+taskStr+" ] : 1000";
+ Benchmark benchmark = new Benchmark(new StringReader(propPart+parsedTasks));
+ Algorithm alg = benchmark.getAlgorithm();
+ ArrayList algTasks = alg.extractTasks();
+ boolean foundAdd = false;
+ for (Iterator iter = algTasks.iterator(); iter.hasNext();) {
+ PerfTask task = (PerfTask) iter.next();
+ if (task.toString().indexOf(taskStr)>=0) {
+ foundAdd = true;
+ }
+ if (task instanceof TaskSequence) {
+ assertEquals("repetions should be 1000 for "+parsedTasks, 1000, ((TaskSequence) task).getRepetitions());
+ assertTrue("sequence for "+parsedTasks+" should be parallel!", ((TaskSequence) task).isParallel());
+ }
+ assertTrue("Task "+taskStr+" was not found in "+alg.toString(),foundAdd);
+ }
+ }
+
+ /**
+ * Test the repetiotion parsing for sequential tasks
+ */
+ public void testParseTaskSequenceRepetition() throws Exception {
+ String taskStr = "AddDoc";
+ String parsedTasks = "{ "+taskStr+" } : 1000";
+ Benchmark benchmark = new Benchmark(new StringReader(propPart+parsedTasks));
+ Algorithm alg = benchmark.getAlgorithm();
+ ArrayList algTasks = alg.extractTasks();
+ boolean foundAdd = false;
+ for (Iterator iter = algTasks.iterator(); iter.hasNext();) {
+ PerfTask task = (PerfTask) iter.next();
+ if (task.toString().indexOf(taskStr)>=0) {
+ foundAdd = true;
+ }
+ if (task instanceof TaskSequence) {
+ assertEquals("repetions should be 1000 for "+parsedTasks, 1000, ((TaskSequence) task).getRepetitions());
+ assertFalse("sequence for "+parsedTasks+" should be sequential!", ((TaskSequence) task).isParallel());
+ }
+ assertTrue("Task "+taskStr+" was not found in "+alg.toString(),foundAdd);
+ }
+ }
+
+ private void logTstParsing (String txt) {
+ if (!DEBUG)
+ return;
+ System.out.println("Test parsing of");
+ System.out.println(txt);
+ }
+
+}
Propchange: lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksParse.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksParse.java
------------------------------------------------------------------------------
svn:executable = *
Added: lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CountingSearchTestTask.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CountingSearchTestTask.java?view=auto&rev=521526
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CountingSearchTestTask.java (added)
+++ lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CountingSearchTestTask.java Thu Mar 22 16:13:48 2007
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.lucene.benchmark.byTask.tasks;
+
+import org.apache.lucene.benchmark.byTask.PerfRunData;
+
+/**
+ * Test Search task which counts number of searches.
+ */
+public class CountingSearchTestTask extends SearchTask {
+
+ public static int numSearches = 0;
+
+ public CountingSearchTestTask(PerfRunData runData) {
+ super(runData);
+ }
+
+ public int doLogic() throws Exception {
+ int res = super.doLogic();
+ incrNumSearches();
+ return res;
+ }
+
+ private static synchronized void incrNumSearches() {
+ numSearches++;
+ }
+
+}
Propchange: lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CountingSearchTestTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: lucene/java/trunk/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CountingSearchTestTask.java
------------------------------------------------------------------------------
svn:executable = *