stdalign: port better to MSVC and to Sun C 5.11
[gnulib.git] / tests / test-math-c++.cc
index d0f8c6e..8fee843 100644 (file)
 
 #include "signature.h"
 
+/* Signature check for a function that takes a real-floating argument.
+   Check that each overloaded function with the specified signature exists.  */
+#define REAL_FLOATING_CHECK(func,\
+                            rettype1, parameters1,\
+                            rettype2, parameters2,\
+                            rettype3, parameters3) \
+  OVERLOADED_CHECK (func, rettype1, parameters1, _1); \
+  OVERLOADED_CHECK (func, rettype2, parameters2, _2); \
+  OVERLOADED_CHECK (func, rettype3, parameters3, _3)
+#define OVERLOADED_CHECK(func, rettype, parameters, suffix) \
+  static rettype (* _GL_UNUSED signature_check_ ## func ## suffix) parameters \
+    = static_cast<rettype(*)parameters>(func)
 
 #if GNULIB_TEST_ACOSF
 SIGNATURE_CHECK (GNULIB_NAMESPACE::acosf, float, (float));
@@ -36,13 +48,24 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::asinf, float, (float));
 SIGNATURE_CHECK (GNULIB_NAMESPACE::atanf, float, (float));
 #endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::atan, double, (double));
+#if GNULIB_TEST_ATAN2F
+SIGNATURE_CHECK (GNULIB_NAMESPACE::atan2f, float, (float, float));
+#endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::atan2, double, (double, double));
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::cbrt, double, (double));
-//SIGNATURE_CHECK (GNULIB_NAMESPACE::copysign, double, (double, double));
+#if GNULIB_TEST_COPYSIGNF
+SIGNATURE_CHECK (GNULIB_NAMESPACE::copysignf, float, (float, float));
+#endif
+#if GNULIB_TEST_COPYSIGN
+SIGNATURE_CHECK (GNULIB_NAMESPACE::copysign, double, (double, double));
+#endif
 #if GNULIB_TEST_COSF
 SIGNATURE_CHECK (GNULIB_NAMESPACE::cosf, float, (float));
 #endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::cos, double, (double));
+#if GNULIB_TEST_COSHF
+SIGNATURE_CHECK (GNULIB_NAMESPACE::coshf, float, (float));
+#endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::cosh, double, (double));
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::erf, double, (double));
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::erfc, double, (double));
@@ -65,6 +88,24 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::frexpf, float, (float, int *));
 SIGNATURE_CHECK (GNULIB_NAMESPACE::frexp, double, (double, int *));
 #endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::hypot, double, (double, double));
+#if GNULIB_TEST_ISFINITE
+# ifdef isfinite
+#  error "isfinite should not be a macro in C++"
+# endif
+REAL_FLOATING_CHECK (isfinite, int, (float), int, (double), int, (long double));
+#endif
+#if GNULIB_TEST_ISINF
+# ifdef isinf
+#  error "isinf should not be a macro in C++"
+# endif
+REAL_FLOATING_CHECK (isinf, int, (float), int, (double), int, (long double));
+#endif
+#if GNULIB_TEST_ISNAN
+# ifdef isnan
+#  error "isnan should not be a macro in C++"
+# endif
+REAL_FLOATING_CHECK (isnan, int, (float), int, (double), int, (long double));
+#endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::j0, double, (double));
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::j1, double, (double));
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::jn, double, (int, double));
@@ -93,11 +134,19 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::powf, float, (float, float));
 #endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::pow, double, (double, double));
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::remainder, double, (double, double));
-//SIGNATURE_CHECK (GNULIB_NAMESPACE::rint, double, (double));
+#if GNULIB_TEST_RINTF
+SIGNATURE_CHECK (GNULIB_NAMESPACE::rintf, float, (float));
+#endif
+#if GNULIB_TEST_RINT
+SIGNATURE_CHECK (GNULIB_NAMESPACE::rint, double, (double));
+#endif
 #if GNULIB_TEST_SINF
 SIGNATURE_CHECK (GNULIB_NAMESPACE::sinf, float, (float));
 #endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::sin, double, (double));
+#if GNULIB_TEST_SINHF
+SIGNATURE_CHECK (GNULIB_NAMESPACE::sinhf, float, (float));
+#endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::sinh, double, (double));
 #if GNULIB_TEST_SQRTF
 SIGNATURE_CHECK (GNULIB_NAMESPACE::sqrtf, float, (float));
@@ -107,6 +156,9 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::sqrtf, float, (float));
 SIGNATURE_CHECK (GNULIB_NAMESPACE::tanf, float, (float));
 #endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::tan, double, (double));
+#if GNULIB_TEST_TANHF
+SIGNATURE_CHECK (GNULIB_NAMESPACE::tanhf, float, (float));
+#endif
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::tanh, double, (double));
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::y0, double, (double));
 //SIGNATURE_CHECK (GNULIB_NAMESPACE::y1, double, (double));
@@ -136,6 +188,11 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::ceil, double, (double));
 SIGNATURE_CHECK (GNULIB_NAMESPACE::ceill, long double, (long double));
 #endif
 
+#if GNULIB_TEST_COPYSIGNL
+SIGNATURE_CHECK (GNULIB_NAMESPACE::copysignl, long double,
+                 (long double, long double));
+#endif
+
 #if GNULIB_TEST_COSL
 SIGNATURE_CHECK (GNULIB_NAMESPACE::cosl, long double, (long double));
 #endif
@@ -168,6 +225,10 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::ldexpl, long double, (long double, int));
 SIGNATURE_CHECK (GNULIB_NAMESPACE::logl, long double, (long double));
 #endif
 
+#if GNULIB_TEST_RINTL
+SIGNATURE_CHECK (GNULIB_NAMESPACE::rintl, long double, (long double));
+#endif
+
 #if GNULIB_TEST_ROUNDF
 SIGNATURE_CHECK (GNULIB_NAMESPACE::roundf, float, (float));
 #endif
@@ -180,6 +241,13 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::round, double, (double));
 SIGNATURE_CHECK (GNULIB_NAMESPACE::roundl, long double, (long double));
 #endif
 
+#if GNULIB_TEST_SIGNBIT
+# ifdef signbit
+#  error "signbit should not be a macro in C++"
+# endif
+REAL_FLOATING_CHECK (signbit, int, (float), int, (double), int, (long double));
+#endif
+
 #if GNULIB_TEST_SINL
 SIGNATURE_CHECK (GNULIB_NAMESPACE::sinl, long double, (long double));
 #endif