Improve performance unit test

This commit is contained in:
James Roseborough
2008-07-14 18:31:06 +00:00
parent d2a201ad87
commit 1eaaff04fa

View File

@@ -63,7 +63,7 @@ public class LoadStateTest extends TestCase {
} }
} }
public void testLongBitsToLuaNumberSpeed() { public void testLongBitsToLuaNumberSpeed() throws InterruptedException {
long[] BITS = new long[ 500000 ]; long[] BITS = new long[ 500000 ];
Random r = new Random(); Random r = new Random();
@@ -75,20 +75,54 @@ public class LoadStateTest extends TestCase {
BITS[i+1] = Double.doubleToLongBits( r.nextDouble() ); BITS[i+1] = Double.doubleToLongBits( r.nextDouble() );
} }
long startTime = System.currentTimeMillis();
for ( int j = 0; j < BITS.length; ++j ) {
LoadState.longBitsToLuaNumber( BITS[j] );
}
long endTime = System.currentTimeMillis();
long complexConversionTime = endTime - startTime;
startTime = System.currentTimeMillis(); long simpleConversionCount = 0;
for ( int j = 0; j < BITS.length; ++j ) { long complexConversionCount = 0;
collectGarbage();
long startTime = leadingEdgeTime();
long endTime = startTime + 1000;
int count = 0;
int n = BITS.length;
for ( ; currentTime()<endTime; count++ ) {
for ( int j=0; j<n; j++ )
simpleBitsToLuaNumber( BITS[j] ); simpleBitsToLuaNumber( BITS[j] );
} }
endTime = System.currentTimeMillis(); simpleConversionCount += count;
long simpleConversionTime = endTime - startTime;
assertTrue( complexConversionTime < simpleConversionTime ); collectGarbage();
startTime = leadingEdgeTime();
endTime = startTime + 1000;
count = 0;
for ( ; currentTime()<endTime; count++ ) {
for ( int j=0; j<n; j++ )
LoadState.longBitsToLuaNumber( BITS[j] );
} }
complexConversionCount += count;
System.out.println("conversion counts: simple,complex="
+simpleConversionCount+","+complexConversionCount);
assertTrue( complexConversionCount >= simpleConversionCount );
}
private void collectGarbage() throws InterruptedException {
Runtime rt = Runtime.getRuntime();
rt.gc();
Thread.sleep(20);
rt.gc();
Thread.sleep(20);
}
private static long leadingEdgeTime() {
long s,e = currentTime();
for ( s=currentTime(); s==(e=currentTime()); )
;
return e;
}
private static long currentTime() {
return System.currentTimeMillis();
}
} }