Ron Schmidt via RT wrote:
>> It'd be nice if we used the same env var for this as we did for the
>> main harness. (that one is currently TEST_JOBS, iirc.)
>
> Per request from moritz I have come up with an updated patch that seems
> to apply cleanly and tested it on Ubuntu and cygwin/Windows Vista. It
> gives the expected output for "make test" and "make spectest" in both
> cases and gives a nice performance boost under Ubuntu. Under
> cygwin/Windows Vista however the performance seems a bit slower and I
> wonder if we shouldn't really check for the OS or use 'jobs:1' in
> languages/perl6/t/harness rather than 'jobs:3'.
>
> Per the suggestion above the controlling environment variable in the
> patch is TEST_JOBS.
Attached is a slightly improved patch:
1) doesn't have trailing spaces in t/harness
2) 'make localtest_loud' works as before
(with the old patch you wouldn't see the verbose output, which is
crucial when you try to fudge tests for rakudo)
3) 'make t/spec/$path_to_file.t' is now verbose by default (which also
makes sense because you usually don't want to run many of those from the
command line)
Moritz
--
Moritz Lenz
http://moritz.faui2k3.org/ | http://perl-6.de/
Index: lib/Parrot/Test/Harness.pm
===================================================================
--- lib/Parrot/Test/Harness.pm (revision 30954)
+++ lib/Parrot/Test/Harness.pm (working copy)
@@ -166,12 +166,13 @@
exit unless my @files = get_files(%options);
if (eval { require TAP::Harness; 1 }) {
- my %opts =
+ my %harness_options =
$options{exec} ? ( exec => $options{exec} )
: $options{compiler} ? ( exec => [ '../../parrot', './' . $options{compiler} ] )
: ();
- $opts{verbosity} = $options{verbosity} ? $options{verbosity} : 0;
- TAP::Harness->new( \%opts )->runtests( @files );
+ $harness_options{verbosity} = $options{verbosity} ? $options{verbosity} : 0;
+ $harness_options{jobs} = $ENV{TEST_JOBS} || $options{jobs} || 1;
+ TAP::Harness->new( \%harness_options )->runtests( @files );
return;
}
Index: languages/perl6/t/harness
===================================================================
--- languages/perl6/t/harness (revision 30969)
+++ languages/perl6/t/harness (working copy)
@@ -24,6 +24,9 @@
'tests-from-file=s' => \my $list_file,
'fudge' => \my $do_fudge,
'verbosity=i' => \$harness_args{verbosity},
+ # A sensible default is num_cores + 1.
+ # Many people have two cores these days.
+ 'jobs:3' => \$harness_args{jobs},
);
Index: languages/perl6/config/makefiles/root.in
===================================================================
--- languages/perl6/config/makefiles/root.in (revision 30969)
+++ languages/perl6/config/makefiles/root.in (working copy)
@@ -197,21 +197,22 @@
# NOTE: eventually, we should remove --keep-exit-code and --fudge
# as the goal is that all tests must pass without fudge
HARNESS_WITH_FUDGE = $(PERL) t/harness --fudge --keep-exit-code
+HARNESS_WITH_FUDGE_JOBS = $(HARNESS_WITH_FUDGE) --jobs
spectest: all t/spec
-cd t/spec && svn up
- $(HARNESS_WITH_FUDGE) t/spec
+ $(HARNESS_WITH_FUDGE_JOBS) t/spec
# Run the spectests that we know work.
spectest_regression: all t/spec t/spectest_regression.data
-cd t/spec && svn up
- $(HARNESS_WITH_FUDGE) --tests-from-file=t/spectest_regression.data
+ $(HARNESS_WITH_FUDGE_JOBS) --tests-from-file=t/spectest_regression.data
fulltest: coretest spectest_regression codetest
# Run the tests in t/localtest.data
localtest: all t/spec t/localtest.data
- @$(HARNESS_WITH_FUDGE) --tests-from-file=t/localtest.data
+ @$(HARNESS_WITH_FUDGE_JOBS) --tests-from-file=t/localtest.data
# Run the tests in t/localtest.data with a higher verbosity
localtest_loud: all t/spec t/localtest.data
@@ -220,11 +221,11 @@
# Run many tests of your choise.
# make somtests TESTFILES=t/foo/bar
sometests: all
- @$(HARNESS_WITH_FUDGE) $(TESTFILES)
+ @$(HARNESS_WITH_FUDGE_JOBS) $(TESTFILES)
# Run a single test
t/*.t t/*/*.t t/*/*/*.t: all
- @$(HARNESS_WITH_FUDGE) $@
+ @$(HARNESS_WITH_FUDGE) --verbosity=1 $@
t/localtest.data:
$(PERL) -MExtUtils::Command -e test_f $@