/*
* 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.jena.tdb.index.bplustree;
import org.apache.jena.atlas.lib.Lib ;
import org.apache.jena.atlas.lib.RandomLib ;
import org.apache.jena.atlas.logging.LogCtl ;
import org.apache.jena.tdb.base.record.RecordFactory ;
import org.apache.jena.tdb.index.bplustree.BPlusTreeRewriter ;
import org.apache.jena.tdb.sys.SystemTDB ;
public class CmdTestBPlusTreeRewriter
{
static { LogCtl.setLog4j() ; }
public static void main(String...argv)
{
// Usage: maxOrder maxSize NumTests
if ( argv.length != 3 )
{
System.err.println("Usage: "+Lib.classShortName(CmdTestBPlusTreeRewriter.class)+" maxOrder maxSize NumTests") ;
System.exit(1) ;
}
SystemTDB.NullOut = true ;
boolean debug = false ;
int MaxOrder = -1 ;
int MinOrder = 2 ;
int MinSize = 0 ;
int MaxSize = -1 ;
int NumTest = -1 ;
try { MaxOrder = Integer.parseInt(argv[0]) ; }
catch (NumberFormatException ex)
{ System.err.println("Bad number for MaxOrder") ; System.exit(1) ; }
try { MaxSize = Integer.parseInt(argv[1]) ; }
catch (NumberFormatException ex)
{ System.err.println("Bad number for MaxSize") ; System.exit(1) ; }
try { NumTest = Integer.parseInt(argv[2]) ; }
catch (NumberFormatException ex)
{ System.err.println("Bad number for NumTest") ; System.exit(1) ; }
// int MaxOrder = 10 ;
// int MinOrder = 2 ;
// int MinSize = 0 ;
// int MaxSize = 1000 ;
// int NumTest = 10000 ; //10*1000 ;
int KeySize = 4 ;
int ValueSize = 8 ;
RecordFactory recordFactory = new RecordFactory(KeySize,ValueSize) ;
int successes = 0 ;
int failures = 0 ;
int[] orders = null ;
int[] sizes = null ;
if ( false )
{
// Specific test case.
orders = new int[]{2} ;
sizes = new int[]{20} ;
NumTest = sizes.length ;
SystemTDB.NullOut = true ;
debug = true ;
BPlusTreeRewriter.debug = true;
}
else
{
orders = new int[NumTest] ;
sizes = new int[NumTest] ;
for ( int i = 0 ; i < orders.length ; i++ )
{
int order = ( MinOrder == MaxOrder ) ? MinOrder : MinOrder+RandomLib.random.nextInt(MaxOrder-MinOrder) ;
int size = ( MinSize == MaxSize ) ? MinSize : MinSize+RandomLib.random.nextInt(MaxSize-MinSize) ;
orders[i] = order ;
sizes[i] = size ;
}
}
int numOnLine = 50 ;
int testsPerTick = 500 ;
int testCount = 1 ;
for ( testCount = 1 ; testCount <= orders.length ; testCount++ )
{
if ( testCount % testsPerTick == 0 )
System.out.print(".") ;
if ( testCount % (testsPerTick*numOnLine) == 0 )
System.out.println();
int idx = testCount - 1 ;
int order = orders[idx] ;
int size = sizes[idx] ;
try {
TestBPlusTreeRewriter.runOneTest(order, size, recordFactory, debug) ;
successes ++ ;
} catch (RuntimeException ex)
{
System.err.printf("-- Fail: (order=%d, size=%d)\n", order, size) ;
ex.printStackTrace(System.err) ;
System.err.printf("--------------------------\n") ;
failures ++ ;
}
}
if ( testCount % (testsPerTick*numOnLine) != 0 )
System.out.println();
System.err.flush() ;
System.out.flush() ;
System.out.printf("DONE : %,d tests : Success=%,d, Failures=%,d\n", NumTest, successes, failures);
}
}