mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-16 01:43:35 +00:00
Replace __ with . as the module qualifier symbol. Replace references to io.state with just io. Replace DCGs with state variables. Replace (C->T;E) syntax for if-then-elses with (if C then T else E) syntax. Replace if-then-elses with switches when possible and where this does not affect what is being tested. Replace separate pred and mode declarations with predmode declarations. Put predicate and function declarations just before the definition of the predicate or function. Delete unneeded module qualifications on predicate and function declarations and definitions. Update .exp files (and if needed, .inp files) for the line number changes that result from the above. For tests that have more than one .exp file and where one of those files is affected by the above, add a section to the source file header that says which .exp file is for what grade, with XXXs for the (as yet) unknown parts.
62 lines
1.8 KiB
Mathematica
62 lines
1.8 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% This is a modified copy of hard_coded/any_free_unify.m.
|
|
%
|
|
% This test is disabled, because automatic initialization of solver variables
|
|
% is no longer supported.
|
|
%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module solver_test.
|
|
|
|
:- interface.
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
% We export this type to prevent the compiler from optimizing away its
|
|
% initialization predicate.
|
|
|
|
:- solver type foo
|
|
where
|
|
representation is int,
|
|
initialisation is init_foo,
|
|
ground is ground,
|
|
any is ground.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module std_util.
|
|
:- import_module list.
|
|
:- import_module bool.
|
|
|
|
main(!IO) :-
|
|
test_any_free_unify([], Result1),
|
|
io.print(Result1, !IO), io.nl(!IO).
|
|
|
|
:- pred init_foo(foo::out(any)) is det.
|
|
:- pragma promise_pure(init_foo/1).
|
|
|
|
init_foo(X) :-
|
|
impure X = 'representation to any foo/0'(42).
|
|
|
|
:- pred test_any_free_unify(list(foo), bool).
|
|
:- mode test_any_free_unify(in(list_skel(any)), out) is det.
|
|
|
|
% In the unification in the condition of the if-then-else, the variable List
|
|
% has an inst which includes `any' components. Normally, we can't check
|
|
% whether `any' has become further instantiated over a goal so we do not allow
|
|
% it in a negated context. However, in this case, the `any' component
|
|
% is unified with `free' so we know that it cannot have become further
|
|
% instantiated. Therefore we should allow the unification in the condition.
|
|
|
|
test_any_free_unify(List, Result) :-
|
|
promise_pure
|
|
( if List = [_ | _] then
|
|
Result = no
|
|
else
|
|
Result = yes
|
|
).
|