Improve performance unit test
This commit is contained in:
@@ -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();
|
||||||
|
|
||||||
@@ -74,21 +74,55 @@ public class LoadStateTest extends TestCase {
|
|||||||
BITS[i ] = r.nextLong();
|
BITS[i ] = r.nextLong();
|
||||||
BITS[i+1] = Double.doubleToLongBits( r.nextDouble() );
|
BITS[i+1] = Double.doubleToLongBits( r.nextDouble() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long simpleConversionCount = 0;
|
||||||
for ( int j = 0; j < BITS.length; ++j ) {
|
long complexConversionCount = 0;
|
||||||
LoadState.longBitsToLuaNumber( BITS[j] );
|
|
||||||
|
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] );
|
||||||
}
|
}
|
||||||
long endTime = System.currentTimeMillis();
|
simpleConversionCount += count;
|
||||||
long complexConversionTime = endTime - startTime;
|
|
||||||
|
|
||||||
startTime = System.currentTimeMillis();
|
collectGarbage();
|
||||||
for ( int j = 0; j < BITS.length; ++j ) {
|
startTime = leadingEdgeTime();
|
||||||
simpleBitsToLuaNumber( BITS[j] );
|
endTime = startTime + 1000;
|
||||||
|
count = 0;
|
||||||
|
for ( ; currentTime()<endTime; count++ ) {
|
||||||
|
for ( int j=0; j<n; j++ )
|
||||||
|
LoadState.longBitsToLuaNumber( BITS[j] );
|
||||||
}
|
}
|
||||||
endTime = System.currentTimeMillis();
|
complexConversionCount += count;
|
||||||
long simpleConversionTime = endTime - startTime;
|
|
||||||
|
|
||||||
assertTrue( complexConversionTime < simpleConversionTime );
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user