mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 01:13:30 +00:00
tests/accumulator/*.m:
tests/analysis_*/*.m:
tests/benchmarks*/*.m:
tests/debugger*/*.{m,exp,inp}:
tests/declarative_debugger*/*.{m,exp,inp}:
tests/dppd*/*.m:
tests/exceptions*/*.m:
tests/general*/*.m:
tests/grade_subdirs*/*.m:
tests/hard_coded*/*.m:
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 debugger tests,
specify the new line numbers in .inp files and expect them in .exp files.
172 lines
3.6 KiB
Mathematica
172 lines
3.6 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% Nested try goals.
|
|
|
|
:- module try_syntax_6.
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is cc_multi.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module exception.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
main(!IO) :-
|
|
io.write_string("test_1:\n", !IO),
|
|
test_1(!IO),
|
|
|
|
io.write_string("\ntest_2:\n", !IO),
|
|
test_2(!IO),
|
|
|
|
io.write_string("\ntest_3:\n", !IO),
|
|
test_3(!IO),
|
|
|
|
io.write_string("\ntest_4:\n", !IO),
|
|
test_4,
|
|
|
|
io.write_string("\ntest_5:\n", !IO),
|
|
test_5(!IO).
|
|
|
|
% Nesting in try goal.
|
|
%
|
|
:- pred test_1(io::di, io::uo) is cc_multi.
|
|
|
|
test_1(!IO) :-
|
|
( try []
|
|
( try []
|
|
throw(3)
|
|
then
|
|
true
|
|
catch 4 ->
|
|
trace [io(!TIO)] (
|
|
io.write_string("caught 4 (WRONG)\n", !TIO)
|
|
)
|
|
)
|
|
then
|
|
true
|
|
else
|
|
true
|
|
catch 3 ->
|
|
io.write_string("caught 3 (RIGHT)\n", !IO)
|
|
).
|
|
|
|
% Nesting in then part.
|
|
%
|
|
:- pred test_2(io::di, io::uo) is cc_multi.
|
|
|
|
test_2(!IO) :-
|
|
( try []
|
|
(try []
|
|
true
|
|
then
|
|
( try []
|
|
throw(3)
|
|
then
|
|
true
|
|
catch 4 ->
|
|
trace [io(!TIO)] (
|
|
io.write_string("caught 4 (WRONG)\n", !TIO)
|
|
)
|
|
)
|
|
else
|
|
true
|
|
catch 3 ->
|
|
trace [io(!TIO)] (
|
|
io.write_string("caught 3 in middle try (WRONG)\n", !TIO)
|
|
)
|
|
)
|
|
then
|
|
true
|
|
catch 3 ->
|
|
io.write_string("caught 3 in outer try (RIGHT)\n", !IO)
|
|
).
|
|
|
|
% Nesting in else part.
|
|
%
|
|
:- pred test_3(io::di, io::uo) is cc_multi.
|
|
|
|
test_3(!IO) :-
|
|
( try []
|
|
( try []
|
|
fail
|
|
then
|
|
true % unreachable
|
|
else
|
|
% Nesting in else part.
|
|
(try []
|
|
throw(1) % should NOT be caught by the outer try
|
|
then
|
|
true
|
|
)
|
|
catch 1 ->
|
|
trace [io(!TIO)] (
|
|
io.write_string("caught 1 in inner try (WRONG)\n", !TIO)
|
|
)
|
|
)
|
|
then
|
|
true
|
|
catch 1 ->
|
|
io.write_string("caught 1 in outer try (RIGHT)\n", !IO)
|
|
).
|
|
|
|
% Nesting in catch part.
|
|
:- pred test_4 is det.
|
|
|
|
test_4 :-
|
|
( try []
|
|
( try []
|
|
throw(1)
|
|
then
|
|
true
|
|
catch 1 ->
|
|
(try []
|
|
throw(1)
|
|
then
|
|
true % unreachable
|
|
catch 1 ->
|
|
trace [io(!IO)] (
|
|
io.write_string("caught 1 in inner try (RIGHT)\n", !IO)
|
|
),
|
|
throw(2)
|
|
)
|
|
catch 2 ->
|
|
trace [io(!IO)] (
|
|
io.write_string("caught 2 in middle try (WRONG)\n", !IO)
|
|
)
|
|
)
|
|
then
|
|
true
|
|
catch 2 ->
|
|
trace [io(!IO)] (
|
|
io.write_string("caught 2 in outer try (RIGHT)\n", !IO)
|
|
)
|
|
).
|
|
|
|
% Nesting in catch_any part.
|
|
%
|
|
:- pred test_5(io::di, io::uo) is cc_multi.
|
|
|
|
test_5(!IO) :-
|
|
( try []
|
|
throw(1)
|
|
then
|
|
true
|
|
catch_any X ->
|
|
( try []
|
|
throw(X)
|
|
then
|
|
true
|
|
catch 1 ->
|
|
io.write_string("caught 1 (RIGHT)\n", !IO)
|
|
)
|
|
).
|