mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-18 02:43:40 +00:00
tests/invalid/*.{m,err_exp}:
tests/misc_tests/*.m:
tests/mmc_make/*.m:
tests/par_conj/*.m:
tests/purity/*.m:
tests/stm/*.m:
tests/string_format/*.m:
tests/structure_reuse/*.m:
tests/submodules/*.m:
tests/tabling/*.m:
tests/term/*.m:
tests/trailing/*.m:
tests/typeclasses/*.m:
tests/valid/*.m:
tests/warnings/*.{m,exp}:
Make these tests use four-space indentation, and ensure that
each module is imported on its own line. (I intend to use the latter
to figure out which subdirectories' tests can be executed in parallel.)
These changes usually move code to different lines. For the tests
that check compiler error messages, expect the new line numbers.
browser/cterm.m:
browser/tree234_cc.m:
Import only one module per line.
tests/hard_coded/boyer.m:
Fix something I missed.
135 lines
2.6 KiB
Mathematica
135 lines
2.6 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% This test case is a copy of tests/general/complex_failure, and tests
|
|
% whether this test case can be compiled with --use-trail; this caused
|
|
% a compiler abort with the 21 September, 1998 version of the compiler.
|
|
%
|
|
% Unfortunately, we cannot just specify --use-trail for complex_failure
|
|
% in tests/general, since that would cause a link error in the usual case
|
|
% that the runtime being linked with is not in a trailing grade.
|
|
|
|
:- module complex_failure.
|
|
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io__state::di, io__state::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module int.
|
|
:- import_module list.
|
|
:- import_module solutions.
|
|
|
|
main -->
|
|
{ solutions(p1, Xs1) },
|
|
print_list(Xs1),
|
|
{ solutions(p2, Xs2) },
|
|
print_list(Xs2),
|
|
{ solutions(p3, Xs3) },
|
|
print_list(Xs3).
|
|
|
|
:- pred p1(int::out) is nondet.
|
|
|
|
p1(X) :-
|
|
p(1, X).
|
|
|
|
:- pred p2(int::out) is nondet.
|
|
|
|
p2(X) :-
|
|
p(2, X).
|
|
|
|
:- pred p3(int::out) is nondet.
|
|
|
|
p3(X) :-
|
|
p(3, X).
|
|
|
|
:- pred p(int::in, int::out) is nondet.
|
|
|
|
p(A, X) :-
|
|
% The first if-then-else can hijack the redoip/redofr slots
|
|
% of p's frame.
|
|
( if
|
|
some [B] ( q(A, B) ; r(A, B) )
|
|
then
|
|
C = B * 10
|
|
% s(B, C)
|
|
else
|
|
C = A * 10
|
|
% s(A, C)
|
|
),
|
|
% The second if-then-else cannot hijack the redoip/redofr slots
|
|
% of p's frame, since this may not be (and usually won't be)
|
|
% on top when execution gets here.
|
|
( if
|
|
some [D] ( q(C, D) ; r(C, D) )
|
|
then
|
|
s(D, X)
|
|
else
|
|
s(C, X)
|
|
).
|
|
|
|
:- pred q(int::in, int::out) is nondet.
|
|
|
|
q(1, 15).
|
|
q(1, 16).
|
|
q(2, 25).
|
|
q(2, 26).
|
|
q(3, 35).
|
|
|
|
q(150, 660).
|
|
q(161, 661).
|
|
q(281, 662).
|
|
|
|
:- pred r(int::in, int::out) is nondet.
|
|
|
|
r(1, 18).
|
|
r(1, 19).
|
|
r(2, 28).
|
|
r(2, 29).
|
|
r(3, 38).
|
|
r(260, 690).
|
|
r(370, 698).
|
|
|
|
:- pred s(int::in, int::out) is nondet.
|
|
|
|
s(F, G) :-
|
|
F < 695,
|
|
(
|
|
G = 10 * F
|
|
;
|
|
G = 10 * F + 1
|
|
).
|
|
|
|
:- pred print_list(list(int), io__state, io__state).
|
|
:- mode print_list(in, di, uo) is det.
|
|
|
|
print_list(Xs) -->
|
|
(
|
|
{ Xs = [] }
|
|
->
|
|
io__write_string("[]\n")
|
|
;
|
|
io__write_string("["),
|
|
print_list_2(Xs),
|
|
io__write_string("]\n")
|
|
).
|
|
|
|
:- pred print_list_2(list(int), io__state, io__state).
|
|
:- mode print_list_2(in, di, uo) is det.
|
|
|
|
print_list_2([]) --> [].
|
|
print_list_2([X | Xs]) -->
|
|
io__write_int(X),
|
|
(
|
|
{ Xs = [] }
|
|
->
|
|
[]
|
|
;
|
|
io__write_string(", "),
|
|
print_list_2(Xs)
|
|
).
|