Files
mercury/tests/hard_coded/java_test.m
Julien Fischer 06263977eb Enable all of hard_coded/java_test.
tests/hard_coded/java_test.m:
     Enable the commented out bits of this test: they now work.

     Update syntax throughout.
2016-04-26 15:49:13 +10:00

69 lines
1.8 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
%
% A test of the Java interface.
:- module java_test.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module int.
:- func foo(int) = int.
:- pragma foreign_export("Java", foo(in) = out, "foo").
foo(X) = X + 1.
main(!IO) :-
java_write_string("Hello, world\n", !IO),
( if java_semidet_succeed then
true
else
java_write_string("java_semidet_succeed failed\n", !IO)
),
( if java_semidet_fail then
java_write_string("java_semidet_fail succeeded\n", !IO)
else
true
).
:- pragma foreign_decl("Java", "
// some Java top-level declarations
class Foo {}
").
:- pragma foreign_code("Java", "
// some Java in-class declarations
static void bar() {
// test `:- pragma foreign_export' functions.
if (foo(42) != 43) {
throw new java.lang.Error(""bar: foo failed"");
}
}
").
:- pred java_write_string(string::in, io::di, io::uo) is det.
:- pragma foreign_proc("Java",
java_write_string(Message::in, _IO0::di, _IO::uo),
[will_not_call_mercury, promise_pure],
"
// a Java procedure
System.out.print(Message);
// test that foreign_decl declarations are visible
Foo f;
// test that foreign_code declarations are visible
bar();
").
:- pred java_semidet_succeed is semidet.
:- pred java_semidet_fail is semidet.
:- pragma foreign_proc("Java", java_semidet_succeed,
[will_not_call_mercury, promise_pure], "SUCCESS_INDICATOR = true;").
:- pragma foreign_proc("Java", java_semidet_fail,
[will_not_call_mercury, promise_pure], "SUCCESS_INDICATOR = false;").