mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-20 20:03:44 +00:00
Estimated hours taken: 0.5 tests/general: Add a new test `liveness.m' (which at the moment we do not yet pass, so the test is not enabled in the Mmake file yet). Fix the `float_test.m' test so that it uses `%6.3g' rather than `%6.3f', so that it doesn't complain if the value of float__max is different in the 16th significant figure. Also comment out the bits which test math__pi and math__e, since they are not implemented for NU-Prolog.
139 lines
3.5 KiB
Mathematica
139 lines
3.5 KiB
Mathematica
% A very basic check of floating point arithmetic and string__to_float.
|
|
% Now tests maths library stuff too.
|
|
|
|
:- module float_test.
|
|
:- interface.
|
|
:- import_module io.
|
|
|
|
:- pred main(io__state, io__state).
|
|
:- mode main(di, uo) is det.
|
|
|
|
:- implementation.
|
|
:- import_module float, math, string, list.
|
|
|
|
main -->
|
|
( { string__to_float("1234.5678", F) } ->
|
|
write_message("1234.5678: ", F)
|
|
;
|
|
io__write_string("can't parse 1234.5678")
|
|
),
|
|
test(3.0, 4.0),
|
|
test(41.0, -3.0),
|
|
test_constants,
|
|
% test_math_constants,
|
|
% test_rounding(2.7),
|
|
% test_rounding(-3.6),
|
|
% test_power(2.2),
|
|
% test_trig(0.5),
|
|
% test_inv_trig(0.6).
|
|
[].
|
|
|
|
:- pred test(float, float, io__state, io__state).
|
|
:- mode test(in, in, di, uo) is det.
|
|
|
|
test(X, Y) -->
|
|
{
|
|
builtin_float_plus(X, Y, Plus),
|
|
builtin_float_times(X, Y, Times),
|
|
builtin_float_minus(X, Y, Minus),
|
|
builtin_float_divide(X, Y, Divide),
|
|
% math__pow(X, Y, Pow)
|
|
true
|
|
},
|
|
write_message("X: ", X),
|
|
write_message("Y: ", Y),
|
|
write_message("X + Y: ", Plus),
|
|
write_message("X * Y: ", Times),
|
|
write_message("X - Y: ", Minus),
|
|
write_message("X / Y: ", Divide),
|
|
% write_message("X ^ Y: ", Pow).
|
|
[].
|
|
|
|
:- pred write_message(string, float, io__state, io__state).
|
|
:- mode write_message(in, in, di, uo) is det.
|
|
|
|
write_message(String, Float) -->
|
|
{ string__format("%s%6.3g\n", [s(String), f(Float)], Message) },
|
|
io__write_string(Message).
|
|
|
|
:- pred test_constants(io__state :: di, io__state :: uo) is det.
|
|
test_constants -->
|
|
{ float__max(FMax) },
|
|
write_message("Float max: ", FMax),
|
|
{ float__min(FMin) },
|
|
write_message("Float min: ", FMin),
|
|
{ float__epsilon(FEps) },
|
|
write_message("Float epsilon: ", FEps).
|
|
|
|
:- pred test_math_constants(io__state :: di, io__state :: uo) is det.
|
|
test_math_constants -->
|
|
{ math__pi(Pi) },
|
|
write_message("Pi: ", Pi),
|
|
{ math__e(E) },
|
|
write_message("e: ", E).
|
|
|
|
:- pred test_rounding(float :: in, io__state :: di, io__state :: uo) is det.
|
|
test_rounding(X) -->
|
|
{
|
|
math__ceiling(X, Ceil),
|
|
math__floor(X, Floor),
|
|
math__round(X, Round),
|
|
math__truncate(X, Truncate)
|
|
},
|
|
write_message("X: ", X),
|
|
write_message("ceil(X): ", Ceil),
|
|
write_message("floor(X): ", Floor),
|
|
write_message("round(X): ", Round),
|
|
write_message("truncate(X): ", Truncate).
|
|
|
|
:- pred test_power(float :: in, io__state :: di, io__state :: uo) is det.
|
|
test_power(X) -->
|
|
{
|
|
math__sqrt(X, Sqrt),
|
|
math__ln(X, Ln),
|
|
math__log2(X, Log2),
|
|
math__log10(X, Log10),
|
|
math__log(2.1, X, Log2_1),
|
|
math__exp(X, Exp)
|
|
},
|
|
write_message("X: ", X),
|
|
write_message("sqrt(X): ", Sqrt),
|
|
write_message("ln(X): ", Ln),
|
|
write_message("log2(X): ", Log2),
|
|
write_message("log10(X): ", Log10),
|
|
write_message("log(2.1,X): ", Log2_1),
|
|
write_message("exp(X): ", Exp).
|
|
|
|
:- pred test_trig(float :: in, io__state :: di, io__state :: uo) is det.
|
|
test_trig(X) -->
|
|
{
|
|
math__sin(X, Sin),
|
|
math__cos(X, Cos),
|
|
math__tan(X, Tan),
|
|
math__sinh(X, Sinh),
|
|
math__cosh(X, Cosh),
|
|
math__tanh(X, Tanh),
|
|
math__atan2(Sin, Cos, Atan2)
|
|
},
|
|
write_message("X: ", X),
|
|
write_message("sin(X): ", Sin),
|
|
write_message("cos(X): ", Cos),
|
|
write_message("tan(X): ", Tan),
|
|
write_message("sinh(X): ", Sinh),
|
|
write_message("cosh(X): ", Cosh),
|
|
write_message("tanh(X): ", Tanh),
|
|
write_message("atan2(sin(X),cos(X)): ", Atan2).
|
|
|
|
:- pred test_inv_trig(float :: in, io__state :: di, io__state :: uo) is det.
|
|
test_inv_trig(X) -->
|
|
{
|
|
math__asin(X, Asin),
|
|
math__acos(X, Acos),
|
|
math__atan(X, Atan)
|
|
},
|
|
write_message("X: ", X),
|
|
write_message("asin(X): ", Asin),
|
|
write_message("acos(X): ", Acos),
|
|
write_message("atan(X): ", Atan).
|
|
|