Files
mercury/tests/hard_coded/bug300.m
Paul Bone 3476082376 Add test cases for bug300
tests/valid/bug300.m:
tests/valid/Mmakefile:
    This simple test case can detect the bug in Java grades.

tests/valid/Mercury.options:
    Run the new test case with --optimize-constructor-last-call

tests/hard_coded/bug300.m:
tests/hard_coded/bug300.exp:
tests/hard_coded/Mmakefile:
    This more complicated test case can detect the bug in C grades.  However
    it requires specific CFLAGS, beyond LCMC, to do so.  The symptoms of the
    bug appear differently in this case.

tests/hard_coded/Mercury.options:
    Setup MCFLAGS so that the test case can detect the bug.
2013-10-08 13:35:01 +11:00

53 lines
1.2 KiB
Mathematica

% vim: ts=4 sw=4 et ft=mercury
% This test case ensures that lco.m handles from ground term scopes properly
% such as the one that is created for the construction of the terms in the
% base case of list_data_term.
:- module bug300.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module int.
:- import_module list.
:- import_module string.
main(!IO) :-
foldl(test,
[ [],
[functor(["single"], [])],
[functor(["1"], []),
functor(["2"], []),
functor(["3"], [])] ],
!IO).
:- pred test(list(data_term)::in, io::di, io::uo) is det.
test(ListTerm, !IO) :-
Term = list_data_term(ListTerm),
io.format("%s -> %s\n", [s(string(ListTerm)), s(string(Term))], !IO).
:- type data_term == mer_term(literal).
:- type mer_term(T)
---> functor(qualified_name, list(mer_term(T))).
:- type qualified_name == list(unqualified_name).
:- type unqualified_name == string.
:- type literal
---> string(string)
; int(int).
:- func list_data_term(list(data_term)) = data_term.
list_data_term([]) = functor(["list", "[]"], []).
list_data_term([H | T]) = functor(["list", "[|]"], [H, list_data_term(T)]).