track total test duration

master
Lothar Buchholz 4 years ago
parent e0d527e202
commit 8315022d0d

@ -1,54 +1,70 @@
import java.io.*;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.jupiter.api.Assertions.*;
class SolutionTest {
static long totalDuration;
@BeforeAll
static void beforeAll() {
totalDuration = 0;
}
@AfterAll
static void afterAll() {
System.out.println( String.format( "All solutions took %01d.%03d secs", totalDuration / 1000, totalDuration % 1000 ));
}
@ParameterizedTest
@CsvFileSource( resources = "testdata.csv" )
void main( final String input, final String expected ) throws IOException {
// keep original streams
InputStream oldIn = System.in;
PrintStream oldOut = System.out;
PrintStream oldErr = System.err;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
InputStream in = new ByteArrayInputStream( input.getBytes() );
System.setIn( in );
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut( new PrintStream( out ) );
ByteArrayOutputStream err = new ByteArrayOutputStream();
System.setErr( new PrintStream( err ) );
redirectStreams(
new ByteArrayInputStream( input.getBytes( UTF_8 )),
new PrintStream( bos, true, UTF_8 ),
new PrintStream( new ByteArrayOutputStream(), true, UTF_8 )
);
// start time tracking
long start = System.currentTimeMillis();
Solution.main( new String[ 0 ] );
out.flush();
Solution.main( new String[0] );
// stop time tracking
long end = System.currentTimeMillis();
long duration = System.currentTimeMillis() - start;
totalDuration += duration;
// restore streams
System.setIn( oldIn );
System.setOut( oldOut );
System.setErr( oldErr );
redirectStreams( oldIn, oldOut, oldErr );
System.out.println( String.format( "Solution took %01d.%03d secs", ( end - start ) / 1000, ( end - start ) % 1000 ) );
System.out.println( String.format( "Solution took %01d.%03d secs", duration / 1000, duration % 1000 ));
try (BufferedReader chk = new BufferedReader( new InputStreamReader( new ByteArrayInputStream( out.toByteArray() )))) {
try (BufferedReader chk = new BufferedReader( new InputStreamReader( new ByteArrayInputStream( bos.toByteArray() )))) {
assertEquals( expected, chk.readLine() );
}
}
finally {
// restore streams
System.setIn( oldIn );
System.setOut( oldOut );
System.setErr( oldErr );
redirectStreams( oldIn, oldOut, oldErr );
}
}
static void redirectStreams( final InputStream input, final PrintStream output, final PrintStream error ) {
System.setIn( input );
System.setOut( output );
System.setErr( error );
}
}

Loading…
Cancel
Save