/*
COMPILABLE_MATH_TEST
REQUIRED_ARGS:
PERMUTE_ARGS:
TEST_OUTPUT:
---
log()
1.70475L
log2()
2.45943L
log10()
0.740363L
round()
6.0L
floor()
5.0F
5.0
5.0L
ceil()
6.0F
6.0
6.0L
trunc()
5.0L
exp()
244.692L
expm1()
243.692L
exp2()
45.2548L
fmin()
-3.2L
fmax()
5.2L
copysign()
-2.5F
-2.5
-2.5L
pow()
9.88212F
9.88212
9.88212L
9.88212
fma()
-12.84L
---
*/

// https://issues.dlang.org/show_bug.cgi?id=5227

import std.math;

pragma(msg, "log()");
enum logf = log(5.5f); //pragma(msg, logf);
enum logd = log(5.5 ); //pragma(msg, logd);
enum logr = log(5.5L); pragma(msg, logr);

pragma(msg, "log2()");
enum log2f = log2(5.5f); //pragma(msg, log2f);
enum log2d = log2(5.5 ); //pragma(msg, log2d);
enum log2r = log2(5.5L); pragma(msg, log2r);

pragma(msg, "log10()");
enum log10f = log10(5.5f); //pragma(msg, log10f);
enum log10d = log10(5.5 ); //pragma(msg, log10d);
enum log10r = log10(5.5L); pragma(msg, log10r);

pragma(msg, "round()");
enum roundf = round(5.5f); //pragma(msg, roundf);
enum roundd = round(5.5 ); //pragma(msg, roundd);
enum roundr = round(5.5L); pragma(msg, roundr);

pragma(msg, "floor()");
enum floorf = floor(5.5f); pragma(msg, floorf);
enum floord = floor(5.5 ); pragma(msg, floord);
enum floorr = floor(5.5L); pragma(msg, floorr);

pragma(msg, "ceil()");
enum ceilf = ceil(5.5f); pragma(msg, ceilf);
enum ceild = ceil(5.5 ); pragma(msg, ceild);
enum ceilr = ceil(5.5L); pragma(msg, ceilr);

pragma(msg, "trunc()");
enum truncf = trunc(5.5f); //pragma(msg, truncf);
enum truncd = trunc(5.5 ); //pragma(msg, truncd);
enum truncr = trunc(5.5L); pragma(msg, truncr);

pragma(msg, "exp()");
enum expf = exp(5.5f); //pragma(msg, expf);
enum expd = exp(5.5 ); //pragma(msg, expd);
enum expr = exp(5.5L); pragma(msg, expr);

pragma(msg, "expm1()");
enum expm1f = expm1(5.5f); //pragma(msg, expm1f);
enum expm1d = expm1(5.5 ); //pragma(msg, expm1d);
enum expm1r = expm1(5.5L); pragma(msg, expm1r);

pragma(msg, "exp2()");
enum exp2f = exp2(5.5f); //pragma(msg, exp2f);
enum exp2d = exp2(5.5 ); //pragma(msg, exp2d);
enum exp2r = exp2(5.5L); pragma(msg, exp2r);



pragma(msg, "fmin()");
enum fminf = fmin(-3.2f, 5.2f); //pragma(msg, fminf);
enum fmind = fmin(-3.2 , 5.2 ); //pragma(msg, fmind);
enum fminr = fmin(-3.2L, 5.2L); pragma(msg, fminr);

pragma(msg, "fmax()");
enum fmaxf = fmax(-3.2f, 5.2f); //pragma(msg, fmaxf);
enum fmaxd = fmax(-3.2 , 5.2 ); //pragma(msg, fmaxd);
enum fmaxr = fmax(-3.2L, 5.2L); pragma(msg, fmaxr);

pragma(msg, "copysign()");
enum csf = copysign(2.5f, -3.0f); pragma(msg, csf); static assert(csf == -2.5);
enum csd = copysign(2.5 , -3.0 ); pragma(msg, csd); static assert(csd == -2.5);
enum csr = copysign(2.5L, -3.0L); pragma(msg, csr); static assert(csr == -2.5);

pragma(msg, "pow()");
enum powf = pow(2.5f, 2.5f); pragma(msg, powf);
enum powd = pow(2.5 , 2.5 ); pragma(msg, powd);
enum powr = pow(2.5L, 2.5L); pragma(msg, powr);
enum powctfe = 2.5 ^^ 2.5; pragma(msg, powctfe);


pragma(msg, "fma()");
enum fmaf = fma(-3.2f, 5.2f, 3.8f); //pragma(msg, fmaf);
enum fmad = fma(-3.2 , 5.2 , 3.8 ); //pragma(msg, fmad);
enum fmar = fma(-3.2L, 5.2L, 3.8L); pragma(msg, fmar);
