#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));
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));
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));
#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));
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));
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
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
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