Files
mercury/tests/general/mu.m
2019-07-04 23:02:10 +02:00

51 lines
1.3 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
%
% This is a regression test.
% Mercury 0.6 generated incorrect code for this test case.
:- module mu.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is cc_multi.
:- implementation.
:- import_module char.
:- import_module int.
:- import_module list.
:- import_module std_util.
:- import_module string.
main(!IO) :-
( if mu(N, [m, (.)], Charlist, N0) then
string.from_char_list(Charlist, S),
io.write_string(S, !IO),
io.write_string("\n", !IO),
write_pint(N, !IO),
write_pint(N0, !IO)
else
io.write_string("Failed\n", !IO)
).
:- type pint
---> z
; s(pint).
:- pred write_pint(pint::in, io::di, io::uo) is det.
write_pint(z, !IO) :-
io.write_string("0\n", !IO).
write_pint(s(N), !IO) :-
io.write_string("1+", !IO),
write_pint(N, !IO).
:- pred mu(pint::out, list(char)::in, list(char)::out, pint::out) is nondet.
mu(z, ['.' | Charlist], Charlist, z) .
mu(s(z), [m | Charlist1], Charlist1, N0) :-
% s(N)=s(z), % if this line is commented out --> SEGV
mu(N0, Charlist1, _Charlist, _).