/* * 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 test; import static org.openjena.atlas.test.Gen.permute ; import static org.openjena.atlas.test.Gen.rand ; import static org.openjena.atlas.test.Gen.strings ; import java.io.PrintStream ; import java.util.ArrayList ; import java.util.Arrays ; import java.util.List ; import org.openjena.atlas.test.ExecGenerator ; import org.openjena.atlas.test.RepeatExecution ; import com.hp.hpl.jena.tdb.index.Index ; import com.hp.hpl.jena.tdb.index.IndexMaker ; import com.hp.hpl.jena.tdb.index.IndexTestLib ; import com.hp.hpl.jena.tdb.index.bplustree.BPlusTreeMaker ; public abstract class RunnerExecute { static enum RunType { test , perf } static boolean showProgress = true ; public void perform(String...a) { List args = new ArrayList(Arrays.asList(a)) ; if ( args.size() == 0 ) { System.err.println("No subcommand") ; System.exit(1) ; } System.out.println(args) ; String subCmd = args.remove(0) ; RunType runType = null ; if ( "test".equalsIgnoreCase(subCmd) ) runType = RunType.test ; else if ( "perf".equalsIgnoreCase(subCmd) ) runType = RunType.perf ; else { System.err.println("Unknown subcommand: "+subCmd) ; System.exit(1) ; } initialize(runType) ; args = processArgs(args) ; int iterations = startRun(args, runType) ; ExecGenerator gen = execGenerator() ; RepeatExecution.repeatExecutions(gen, iterations, showProgress) ; finishRun() ; } protected abstract void initialize(RunType runType) ; protected abstract List processArgs(List args) ; protected abstract ExecGenerator execGenerator() ; protected abstract int startRun(List args, RunType runType) ; protected abstract void finishRun() ; public static void usage(PrintStream printStream) { printStream.println("Usage: OPTIONS Order NumKeys Iterations") ; printStream.println("Options:") ; printStream.println(" --display") ; printStream.println(" --check (same as btree:checknode)") ; printStream.println(" --bptree:check") ; printStream.println(" --bptree:track") ; printStream.println(" --bptree:checknode (expensive)") ; printStream.println(" --bptree:log") ; printStream.println(" --bptree:safe") ; } /* Performance test : print the keys if there was a problem */ public static void perfTest(int order, int maxValue, int numKeys) { // UNUSED. // if ( numKeys >= 3000 ) // System.err.printf("Warning: too many keys\n") ; int[] keys1 = rand(numKeys, 0, maxValue) ; int[] keys2 = permute(keys1, numKeys) ; try { IndexMaker maker = new BPlusTreeMaker(order, order, false) ; Index rIndex = IndexTestLib.buildIndex(maker, keys1); IndexTestLib.delete(rIndex, keys2) ; } catch (RuntimeException ex) { System.err.printf("int order=%d ;\n", order) ; System.err.printf("int[] keys1 = {%s} ;\n", strings(keys1)) ; System.err.printf("int[] keys2 = {%s} ; \n", strings(keys2)) ; throw ex ; } } }