Times are: make quicktest, after caching output: 23 seconds make test: 175 seconds
make quicktest could screw up if: - you ctrl-c it, or make test (although I haven't had problems with that yet) during the compilation process at just the right time - you do anything to invalidate existing .pbc files, such as rearranging ops. not sure what else could trigger this. I still find it extremely useful, in spite of these limitations on its usage. The patch is included below. Mike Lambert Index: Makefile.in =================================================================== RCS file: /cvs/public/parrot/Makefile.in,v retrieving revision 1.140 diff -u -r1.140 Makefile.in --- Makefile.in 16 Mar 2002 14:38:25 -0000 1.140 +++ Makefile.in 21 Mar 2002 22:48:56 -0000 @@ -403,6 +403,11 @@ .test_dummy_j: $(PERL) t/harness -j +quicktest: $(TEST_PROG) assemble.pl .quicktest_dummy + +.quicktest_dummy: + $(PERL) t/harness quick + mopstest: $(TEST_PROG) examples/assembly/mops.pbc $(TEST_PROG) examples/assembly/mops.pbc Index: lib/Parrot/Test.pm =================================================================== RCS file: /cvs/public/parrot/lib/Parrot/Test.pm,v retrieving revision 1.18 diff -u -r1.18 Test.pm --- lib/Parrot/Test.pm 4 Mar 2002 02:32:54 -0000 1.18 +++ lib/Parrot/Test.pm 21 Mar 2002 22:49:01 -0000 @@ -64,12 +64,27 @@ my $t = $0; $t =~ s/\.t$/$count\.$_/; $t } ( qw(pasm pbc out) ); - open ASSEMBLY, "> $as_f" or die "Unable to open '$as_f'"; - binmode ASSEMBLY; - print ASSEMBLY $assembly; - close ASSEMBLY; + my $can_skip_compile = $ENV{PARROT_QUICKTEST}; + if ($can_skip_compile) + { + open INASSEMBLY, "$as_f" or $can_skip_compile = 0; + if ($can_skip_compile) { + local $/ = undef; + my $inassembly = <INASSEMBLY>; + close INASSEMBLY; + $can_skip_compile = 0 if ($assembly ne $inassembly); + $can_skip_compile = 0 if (not -e $by_f); + } + } - _run_command( "$PConfig{perl} assemble.pl $as_f --output $by_f" ); + if (!$can_skip_compile) { + open ASSEMBLY, "> $as_f" or die "Unable to open '$as_f'"; + binmode ASSEMBLY; + print ASSEMBLY $assembly; + close ASSEMBLY; + + _run_command( "$PConfig{perl} assemble.pl $as_f --output $by_f" ); + } $TEST_PROG_ARGS = "" unless defined $TEST_PROG_ARGS; _run_command( "./$PConfig{test_prog} ${TEST_PROG_ARGS} $by_f", 'STDOUT' => $out_f, 'STDERR' => $out_f); @@ -86,9 +101,7 @@ my $pass = $Builder->$meth( $prog_output, $output, $desc ); unless($ENV{POSTMORTEM}) { - foreach my $i ( $as_f, $by_f, $out_f ) { - unlink $i; - } + unlink $out_f; } return $pass; Index: t/harness =================================================================== RCS file: /cvs/public/parrot/t/harness,v retrieving revision 1.9 diff -u -r1.9 harness --- t/harness 31 Jan 2002 19:03:34 -0000 1.9 +++ t/harness 21 Mar 2002 22:49:01 -0000 @@ -14,6 +14,9 @@ getopts('jP', \%opts); $ENV{TEST_PROG_ARGS} = join(' ', map { "-$_" } keys %opts ); +$ENV{PARROT_QUICKTEST} = grep $_ eq 'quick', @ARGV; +@ARGV = grep $_ ne 'quick', @ARGV; + # Pass in a list of tests to run on the command line, else run all the tests. my @tests = @ARGV ? @ARGV : map { glob( "t/$_/*.t" ) } ( qw(op pmc) ); runtests(@tests);