mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 09:23:44 +00:00
There was a bug that prevented the tests in each directory from being run
in parallel, even when the mmake was invoked with e.g. -j4. The bug
was the absence of a '+' on an action that invoked tests/run_one_test.
Without that +, the make process inside the "mmake -j4 runtests_local"
command issued by bootcheck screwed up its connection with the recursive
make invoked by run_one_test, and apparently decided to stop using
parallelism. It was telling us this all this time but its messages,
which looked like this:
make[2]: warning: -jN forced in submake: disabling jobserver mode.
were lost in the sea of other bootcheck output until my recent change
to run_one_test.
A single-character change fixes the bug; the rest of this big change is
dealing with the consequences of fixing the bug. Many test cases in
the hard_coded and valid directories contain nested modules, which
need to be compiled sequentially.
tests/Mmake.common:
Fix the bug.
Delete the duplicate "ALL TESTS SUCCEEDED" message from the runtests
target, since the runtests_local target already prints a message
to that effect. Make this message more emphatic.
tests/run_one_test:
Make the output a bit easier to understand.
tests/hard_coded/*.{m,exp}:
tests/submodules/*.{m,exp}:
Move the source files and expected output files of the test cases that
use nested modules from hard_coded to submodules, since most of the tests
in the hard_coded can be done in parallel, while the ones in submodules
are already done in sequence.
tests/hard_coded/Mmakefile:
tests/hard_coded/Mercury.options:
tests/submodules/Mmakefile:
tests/submodules/Mercury.options:
Move the Mmakefile and Mercury.options entries of the moved test cases
from hard_coded to submodules.
tests/valid_seq:
A new test directory, to hold the test cases originally in tests/valid
that contain nested modules. Moving these to a new directory, which
forces -j1, allows us to execute the remaining ones in parallel.
tests/valid/*.m:
tests/valid_seq/*.m:
Move the source files of the test cases that use nested modules
from valid to valid_seq.
In a few cases, clean up the test cases a bit.
tests/valid/Mmakefile:
tests/valid/Mercury.options:
tests/valid_seq/Mmakefile:
tests/valid_seq/Mercury.options:
tests/valid/Mmake.valid.common:
Add valid_seq/Mmakefile to list the test cases now in valid_seq,
and add valid_seq/Mercury.options to hold their option values.
Delete the entries of those tests from valid/Mmakefile, and their option
values from valid/Mercury.options. Unlike valid/Mmakefile,
valid_seq/Mmakefile forces -j1.
To avoid unnecessary duplication between the two Makefiles, put
all the rules that both need into valid/Mmake.valid.common, and
include this in both Mmakefiles.
tests/string_format/Mmakefile:
Force -j1, since these tests share a library module.
tests/Mmakefile:
List the new valid_seq directory among the others.
tests/bootcheck:
Execute the tests in the new valid_seq directory as well as the others.
Record when the execution of the test suite is started.
Comment out invocations of set -x, since they add no useful information
in the vast majority of cases. The comment sign can be removed if and
when the information *would* be useful.
Don't try to copy a nonexistent file. (The error message about this
was also lost in the noise.)
77 lines
1.9 KiB
Mathematica
77 lines
1.9 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% backquoted_qualified_ops.m
|
|
% Ralph Becket <rafe@cs.mu.oz.au>
|
|
% Mon Dec 22 13:45:14 EST 2003
|
|
%
|
|
% Tests that the parser recognises backquoted, module-qualified operator names.
|
|
%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module backquoted_qualified_ops.
|
|
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io :: di, io :: uo) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module int.
|
|
:- import_module string.
|
|
:- import_module list.
|
|
:- import_module backquoted_qualified_ops.a.
|
|
:- import_module backquoted_qualified_ops.a.b.
|
|
:- import_module backquoted_qualified_ops.a.b.c.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module a.
|
|
:- interface.
|
|
:- func int `add` int = int.
|
|
|
|
:- module b.
|
|
:- interface.
|
|
:- func int `mul` int = int.
|
|
|
|
:- module c.
|
|
:- interface.
|
|
:- func int `div` int = int.
|
|
|
|
:- end_module c.
|
|
|
|
:- end_module b.
|
|
|
|
:- end_module a.
|
|
|
|
:- module a.
|
|
:- implementation.
|
|
X `add` Y = X + Y.
|
|
|
|
:- module b.
|
|
:- implementation.
|
|
X `mul` Y = X * Y.
|
|
|
|
:- module c.
|
|
:- implementation.
|
|
X `div` Y = X / Y.
|
|
:- end_module c.
|
|
|
|
:- end_module b.
|
|
|
|
:- end_module a.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
main(!IO) :-
|
|
io.format("2 `a.add` 2 = %d\n2 `a.b.mul` 2 = %d\n2 `a.b.c.div` 2 = %d\n",
|
|
[i(2 `a.add` 2), i(2 `a.b.mul` 2), i(2 `a.b.c.div` 2)], !IO).
|
|
|
|
%---------------------------------------------------------------------------%
|