package com.ricebridge.csvman.test;
import com.ricebridge.csvman.*;
import org.jostraca.util.*;
import junit.framework.*;
import junit.textui.*;
import javax.swing.table.*;
import java.sql.ResultSet;
import java.util.*;
import java.io.*;
public class PerformanceTest extends TestCase {
public PerformanceTest( String pName ) {
super( pName );
}
public static TestSuite suite() {
return new TestSuite( PerformanceTest.class );
}
public static void main( String[] pArgs ) {
if( 0 < pArgs.length ) {
sFromMemory = "mem".equals(pArgs[0]);
}
TestRunner.run( suite() );
}
private static boolean sFromMemory = false;
private static String sFileContents = null;
public void testFiles() {
CsvManager cm = new CsvManager();
try {
String fn = null;
List d = null;
TableModel tm = null;
ResultSet rs = null;
fn = "p10";
d = cm.load( getCsvFile(fn) );
d = cm.loadAsLists( getCsvFile(fn) );
tm = cm.loadTableModel( getCsvFile(fn), false );
rs = cm.loadResultSet( getCsvFile(fn), false );
String[] files = new String[] { "p10", "p100", "p1000", "p10000", "p100000", };
ArrayList stats = new ArrayList();
ArrayList row = new ArrayList();
row.add("FileName");
row.add("NumLines");
row.add("Load");
row.add("LoadAsLists");
row.add("TableModel");
row.add("ResultSet");
stats.add( row );
cm.getCsvSpec().setFlushEachLine( true );
for( int fI = 0; fI < files.length; fI++ ) {
measureFile( cm, files[fI], (long) Math.pow(10, fI+1), stats );
}
cm.saveAsLists( getCsvFile("stats"), stats );
}
catch( Exception e ) {
System.out.println( e.getMessage() );
e.printStackTrace();
}
catch( Error e ) {
System.out.println( cm.getLineCount() );
System.out.println( e.getMessage() );
e.printStackTrace();
}
}
public void measureFile( CsvManager pCsvManager, String pFileName, long pLineCount, ArrayList pStats ) throws Exception {
if( sFromMemory ) {
loadCsvFile( pFileName );
}
for( int rI = 0; rI < 10; rI++ ) {
System.out.println( pFileName+":"+rI );
ArrayList row = new ArrayList();
row.add( pFileName );
row.add( new Long(pLineCount) );
pStats.add( row );
List d = load( pCsvManager, pFileName );
display(pCsvManager);
check( pCsvManager, pLineCount, 0 );
row.add( new Long( pCsvManager.getTimeTaken() ) );
System.out.println( "load:"+rI+":"+pCsvManager.getTimeTaken() );
d = null;
System.gc();
List lald = loadAsLists( pCsvManager, pFileName );
check( pCsvManager, pLineCount, 0 );
row.add( new Long( pCsvManager.getTimeTaken() ) );
System.out.println( "lald:"+rI+":"+pCsvManager.getTimeTaken() );
lald = null;
System.gc();
TableModel tm = loadTableModel( pCsvManager, pFileName );
check( pCsvManager, pLineCount, 0 );
row.add( new Long( pCsvManager.getTimeTaken() ) );
System.out.println( "tm:"+rI+":"+pCsvManager.getTimeTaken() );
tm = null;
System.gc();
ResultSet rs = loadResultSet( pCsvManager, pFileName );
check( pCsvManager, pLineCount, 0 );
row.add( new Long( pCsvManager.getTimeTaken() ) );
System.out.println( "rs:"+rI+":"+pCsvManager.getTimeTaken() );
rs = null;
System.gc();
}
if( sFromMemory ) {
sFileContents = null;
}
}
public List load( CsvManager pCsvManager, String pFileName ) throws Exception {
List out = null;
if( sFromMemory ) {
out = pCsvManager.loadFromString( sFileContents );
}
else {
out = pCsvManager.load( getCsvFile( pFileName ) );
}
return out;
}
public List loadAsLists( CsvManager pCsvManager, String pFileName ) throws Exception {
List out = null;
if( sFromMemory ) {
out = pCsvManager.loadAsListsFromString( sFileContents );
}
else {
out = pCsvManager.loadAsLists( getCsvFile( pFileName ) );
}
return out;
}
public TableModel loadTableModel( CsvManager pCsvManager, String pFileName ) throws Exception {
TableModel out = null;
if( sFromMemory ) {
out = pCsvManager.loadTableModelFromString( sFileContents, false );
}
else {
out = pCsvManager.loadTableModel( getCsvFile( pFileName ), false );
}
return out;
}
public ResultSet loadResultSet( CsvManager pCsvManager, String pFileName ) throws Exception {
ResultSet out = null;
if( sFromMemory ) {
out = pCsvManager.loadResultSetFromString( sFileContents, false );
}
else {
out = pCsvManager.loadResultSet( getCsvFile( pFileName ), false );
}
return out;
}
public void loadCsvFile( String pFileName ) throws Exception {
File csvf = getCsvFile( pFileName );
BufferedReader br = new BufferedReader( new FileReader( csvf ) );
StringBuffer sb = new StringBuffer();
String line = null;
while( null != ( line = br.readLine() ) ) {
sb.append( line );
sb.append( "\n" );
}
br.close();
sFileContents = sb.toString();
System.out.println( "loaded: "+pFileName );
}
public void check( CsvManager pCsvManager, long pLineCount, long pBadLineCount ) {
assertEquals( pLineCount, pCsvManager.getLineCount() );
assertEquals( pBadLineCount, pCsvManager.getBadLineCount() );
}
public void display( CsvManager pCsvManager ) {
System.out.println( "lc:"+pCsvManager.getLineCount()+" blc:"+pCsvManager.getBadLineCount()
+" tt:"+pCsvManager.getTimeTaken() +" atpl:"+pCsvManager.getAverageTimePerLineInSeconds());
}
public static File getCsvFile( String pName ) throws Exception {
File csvf = TestUtil.getTextCsvFile( pName );
if( !csvf.exists() ) {
csvf = new File( pName+".csv" );
}
return csvf;
}
}