Files
mercury/tests/hard_coded/mutable_excp.m
2020-10-06 19:20:18 +11:00

76 lines
1.7 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
%
% Test mutables whose initial value expressions throw exceptions.
:- module mutable_excp.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module exception.
:- mutable(foo, int, init_foo, ground, [untrailed, attach_to_io_state]).
:- mutable(bar, int, init_bar, ground, [untrailed, attach_to_io_state]).
:- mutable(baz, int, init_baz, ground, [untrailed, attach_to_io_state]).
:- func init_foo = int.
init_foo = X :-
promise_equivalent_solutions [X] (
try(get_string(561), Result),
(
Result = succeeded(_),
X = 80
;
Result = exception(_),
X = 40
),
trace [io(!IO)] (
io.write_string("init_foo: X = ", !IO),
io.write_int(X, !IO),
io.nl(!IO),
io.flush_output(!IO)
)
).
:- func init_bar = int.
init_bar =
( if get_magic_number(3) then
throw(magic_number_exception)
else
561
).
:- func init_baz = int.
init_baz = X :-
trace [io(!IO)] (
io.write_string("init_baz: I should not be running.\n", !IO)
),
X = 10.
:- pred get_string(int::in, string::out) is det.
get_string(X, Str) :-
( if X = 561 then
throw(magic_number_exception)
else
Str = "not 561"
).
:- type magic_number_exception
---> magic_number_exception.
:- pred get_magic_number(int::out) is det.
get_magic_number(3).
main(!IO) :-
io.write_string("main: I should not be running.\n", !IO).