// (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 #include #include #include #ifdef BOOST_HAS_FLOAT128 #include #endif template constexpr void test() { if constexpr (std::numeric_limits::has_quiet_NaN) { static_assert(boost::math::ccmath::isnan(boost::math::ccmath::round(std::numeric_limits::quiet_NaN())), "If x is NaN, NaN is returned"); static_assert(boost::math::ccmath::lround(std::numeric_limits::quiet_NaN()) == T(0), "If x is NaN, 0 is returned"); static_assert(boost::math::ccmath::llround(std::numeric_limits::quiet_NaN()) == T(0), "If x is NaN, 0 is returned"); } static_assert(boost::math::ccmath::round(T(0)) == T(0)); static_assert(boost::math::ccmath::lround(T(0)) == 0l); static_assert(boost::math::ccmath::llround(T(0)) == 0ll); static_assert(boost::math::ccmath::round(T(-0)) == T(-0)); static_assert(boost::math::ccmath::lround(T(-0)) == -0l); static_assert(boost::math::ccmath::llround(T(-0)) == -0ll); static_assert(boost::math::ccmath::isinf(boost::math::ccmath::round(std::numeric_limits::infinity()))); static_assert(boost::math::ccmath::lround(std::numeric_limits::infinity()) == 0l); static_assert(boost::math::ccmath::llround(std::numeric_limits::infinity()) == 0ll); static_assert(boost::math::ccmath::round(T(2.3)) == T(2)); static_assert(boost::math::ccmath::round(T(2.5)) == T(3)); static_assert(boost::math::ccmath::round(T(2.7)) == T(3)); static_assert(boost::math::ccmath::round(T(-2.3)) == T(-2)); static_assert(boost::math::ccmath::round(T(-2.5)) == T(-3)); static_assert(boost::math::ccmath::round(T(-2.7)) == T(-3)); static_assert(boost::math::ccmath::lround(T(2.3)) == 2l); static_assert(boost::math::ccmath::lround(T(2.5)) == 3l); static_assert(boost::math::ccmath::lround(T(2.7)) == 3l); static_assert(boost::math::ccmath::lround(T(-2.3)) == -2l); static_assert(boost::math::ccmath::lround(T(-2.5)) == -3l); static_assert(boost::math::ccmath::lround(T(-2.7)) == -3l); static_assert(boost::math::ccmath::llround(T(2.3)) == 2ll); static_assert(boost::math::ccmath::llround(T(2.5)) == 3ll); static_assert(boost::math::ccmath::llround(T(2.7)) == 3ll); static_assert(boost::math::ccmath::llround(T(-2.3)) == -2ll); static_assert(boost::math::ccmath::llround(T(-2.5)) == -3ll); static_assert(boost::math::ccmath::llround(T(-2.7)) == -3ll); } #if !defined(BOOST_MATH_NO_CONSTEXPR_DETECTION) && !defined(BOOST_MATH_USING_BUILTIN_CONSTANT_P) int main() { test(); test(); #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS test(); #endif #ifdef BOOST_HAS_FLOAT128 test(); #endif return 0; } #else int main() { return 0; } #endif