mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-18 19:03:45 +00:00
Estimated hours taken: 0.1
Moved tests of library/{integer,rational}.m from tests/general to
tests/hard_coded since the library modules and their tests cannot
be compiled under NU-Prolog.
general/Mmakefile:
general/.cvsignore:
Removed references to integer_test and rational_test.
general/integer_test.m:
general/integer_test.exp:
general/rational_test.exp:
general/rational_test.m:
File removed.
hard_coded/Mmakefile:
hard_coded/.cvsignore:
Added references to integer_test and rational_test.
hard_coded/integer_test.m:
hard_coded/integer_test.exp:
hard_coded/rational_test.exp:
hard_coded/rational_test.m:
File added.
115 lines
3.2 KiB
Mathematica
115 lines
3.2 KiB
Mathematica
% A very basic check of arithmetic on big integers.
|
|
|
|
:- module integer_test.
|
|
:- interface.
|
|
:- import_module io.
|
|
|
|
:- pred main(io__state, io__state).
|
|
:- mode main(di, uo) is det.
|
|
|
|
:- implementation.
|
|
:- import_module integer, string, list, int, require.
|
|
|
|
main -->
|
|
{
|
|
X = integer:from_string("1234567890987654321"),
|
|
Y = integer:from_string(
|
|
"98765432101234567890123400000009999111"),
|
|
Z = integer(200)
|
|
;
|
|
error("integer_test:main: internal error in test")
|
|
},
|
|
test(X, Y, Z).
|
|
|
|
:- pred test(integer, integer, integer, io__state, io__state).
|
|
:- mode test(in, in, in, di, uo) is det.
|
|
|
|
test(X, Y, Z) -->
|
|
{
|
|
Plus is X + Y,
|
|
Times is X * Y,
|
|
Minus is X - Y,
|
|
Div is Y // X,
|
|
Rem is Y rem X,
|
|
integer:pow(X,Z,Pow),
|
|
fac(Z,Fac)
|
|
},
|
|
write_message("X: ", X),
|
|
write_message("Y: ", Y),
|
|
write_message("Z: ", Z),
|
|
write_message("X + Y: ", Plus),
|
|
write_message("X * Y: ", Times),
|
|
write_message("X - Y: ", Minus),
|
|
write_message("Y // X: ", Div),
|
|
write_message("Y rem X: ", Rem),
|
|
write_message("fac(Z): ", Fac),
|
|
write_message("pow(X,Z): ", Pow),
|
|
{ X0 = integer(100000), X1 = integer(3) },
|
|
write_integer(X0), io:write_string(" div mod "),
|
|
write_integer(X1), io:write_string(" = "),
|
|
write_integer(X0 div X1), io:write_string(" "),
|
|
write_integer(X0 mod X1), io:nl,
|
|
write_integer(-X0), io:write_string(" div mod "),
|
|
write_integer(X1), io:write_string(" = "),
|
|
write_integer(X0 div -X1), io:write_string(" "),
|
|
write_integer(X0 mod -X1), io:nl,
|
|
write_integer(X0), io:write_string(" div mod "),
|
|
write_integer(-X1), io:write_string(" = "),
|
|
write_integer(-X0 div X1), io:write_string(" "),
|
|
write_integer(-X0 mod X1), io:nl,
|
|
write_integer(-X0), io:write_string(" div mod "),
|
|
write_integer(-X1), io:write_string(" = "),
|
|
write_integer(-X0 div -X1), io:write_string(" "),
|
|
write_integer(-X0 mod -X1), io:nl,
|
|
write_integer(X0), io:write_string(" // rem "),
|
|
write_integer(X1), io:write_string(" = "),
|
|
write_integer(X0 // X1), io:write_string(" "),
|
|
write_integer(X0 rem X1), io:nl,
|
|
write_integer(-X0), io:write_string(" // rem "),
|
|
write_integer(X1), io:write_string(" = "),
|
|
write_integer(X0 // -X1), io:write_string(" "),
|
|
write_integer(X0 rem -X1), io:nl,
|
|
write_integer(X0), io:write_string(" // rem "),
|
|
write_integer(-X1), io:write_string(" = "),
|
|
write_integer(-X0 // X1), io:write_string(" "),
|
|
write_integer(-X0 rem X1), io:nl,
|
|
write_integer(-X0), io:write_string(" // rem "),
|
|
write_integer(-X1), io:write_string(" = "),
|
|
write_integer(-X0 // -X1), io:write_string(" "),
|
|
write_integer(-X0 rem -X1), io:nl,
|
|
{ int:min_int(Minint) },
|
|
( { integer(Minint) < integer(0) } ->
|
|
io:write_string("integer(min_int) ok\n")
|
|
;
|
|
io:write_string("integer(min_int) failed\n")
|
|
).
|
|
|
|
|
|
:- pred write_message(string, integer, io__state, io__state).
|
|
:- mode write_message(in, in, di, uo) is det.
|
|
|
|
write_message(String, Int) -->
|
|
io__write_string(String),
|
|
{ Str = integer:to_string(Int) },
|
|
io__write_string(Str),
|
|
io__nl.
|
|
|
|
:- pred fac(integer, integer).
|
|
:- mode fac(in, out) is det.
|
|
|
|
fac(X,F) :-
|
|
( X =< integer(0) ->
|
|
F = integer(1)
|
|
;
|
|
fac(X-integer(1),F1),
|
|
F = F1 * X
|
|
).
|
|
|
|
:- pred write_integer(integer, io:state, io:state).
|
|
:- mode write_integer(in, di, uo) is det.
|
|
write_integer(X) -->
|
|
{ S = integer:to_string(X) },
|
|
io:write_string(S).
|
|
|
|
|