// (C) Copyright Matt Borland 2021. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include #include #ifdef BOOST_HAS_FLOAT128 #include #endif template void test() { static_assert(boost::math::ccmath::abs(T(3)) == 3); static_assert(boost::math::ccmath::abs(T(-3)) == 3); static_assert(boost::math::ccmath::abs(T(-0)) == 0); static_assert(boost::math::ccmath::abs(-std::numeric_limits::infinity()) == std::numeric_limits::infinity()); if constexpr (std::numeric_limits::has_quiet_NaN) { static_assert(boost::math::ccmath::abs(-std::numeric_limits::quiet_NaN()) != std::numeric_limits::quiet_NaN()); } } template void gpp_test() { static_assert(std::sin(T(0)) == 0); constexpr T sin_1 = boost::math::ccmath::abs(std::sin(T(-1))); static_assert(sin_1 > 0); static_assert(sin_1 == T(0.841470984807896506652502321630298999622563060798371065672751709L)); } template void fabs_test() { static_assert(boost::math::ccmath::fabs(T(3)) == 3); static_assert(boost::math::ccmath::fabs(T(-3)) == 3); static_assert(boost::math::ccmath::fabs(T(-0)) == 0); static_assert(boost::math::ccmath::fabs(-std::numeric_limits::infinity()) == std::numeric_limits::infinity()); if constexpr (std::numeric_limits::has_quiet_NaN) { static_assert(boost::math::ccmath::fabs(-std::numeric_limits::quiet_NaN()) != std::numeric_limits::quiet_NaN()); } } // Only test on platforms that provide BOOST_MATH_IS_CONSTANT_EVALUATED #ifndef BOOST_MATH_NO_CONSTEXPR_DETECTION int main() { test(); test(); #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS test(); #endif #if defined(BOOST_MATH_TEST_FLOAT128) && !defined(BOOST_MATH_USING_BUILTIN_CONSTANT_P) test(); #endif test(); test(); test(); test(); test(); // Types that are convertible to int test(); test(); // fabs fabs_test(); fabs_test(); #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS fabs_test(); #endif #if defined(BOOST_MATH_TEST_FLOAT128) && !defined(BOOST_MATH_USING_BUILTIN_CONSTANT_P) && defined(BOOST_MATH_TEST_FLOAT128) fabs_test(); #endif // Tests using glibcxx extensions that allow for some constexpr cmath #if __GNUC__ >= 10 gpp_test(); gpp_test(); #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS gpp_test(); #endif #endif // glibcxx tests return 0; } #else int main() { return 0; } #endif