Files
mercury/tests/warnings/simple_code.m
Zoltan Somogyi c03b11ca48 Update the style of more test cases.
And updated expected outputs for changed line numbers.
2021-07-27 19:29:21 +10:00

115 lines
1.9 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
:- module simple_code.
:- interface.
:- pred p(int::in, int::out) is erroneous.
:- implementation.
:- import_module require.
p -->
(
[]
;
{ error("foo") }
),
( { true } ->
{ Z = 2 }
;
{ Z = 3 }
),
( { X = 3, X = 2, Z = 2 } ->
[]
;
[]
),
( { \+ true } ->
[]
;
[]
),
( { \+ det_pred } ->
[]
;
[]
),
( { \+ fail_pred } ->
[]
;
[]
),
{ \+ fail },
{ obsolete1 },
{ obsolete2 },
{ obsolete3 },
( { error("blah") } ->
[]
;
[]
).
:- pred det_pred is det.
det_pred.
:- pred fail_pred is failure.
fail_pred :- fail.
:- pred obsolete1 is det.
:- pragma obsolete(obsolete1/0).
obsolete1.
:- pred obsolete2 is det.
:- pragma obsolete(obsolete2/0, [pred42/0]).
obsolete2.
:- pred obsolete3 is det.
:- pragma obsolete(obsolete3/0, [pred42/0, wonderful.pred43/0]).
obsolete3.
% This should give a warning about the second disjunct never succeeding.
:- pred r(int, int).
:- mode r(in(bound(1)), out(bound(42))) is det.
r(1, 42).
r(2, 21).
% This should not give a warning, because the second disjunct can
% succeed in the first mode.
:- pred q(int, int).
:- mode q(in, out) is semidet.
:- mode q(in(bound(1)), out(bound(42))) is det.
q(1, 42).
q(2, 21).
:- type node ---> a ; b ; c.
:- pred parent(node, node).
:- mode parent(in, out).
:- mode parent(out, in).
parent(a, b).
parent(b, c).
parent(a, c).
:- pred node(node).
:- mode node(out).
node(a).
node(b).
node(c).
:- pred anc(node, node).
:- mode anc(in, out).
:- mode anc(out, in).
anc(X, X) :-
node(X).
anc(X, Z) :-
parent(X, Y),
anc(Y, Z).