// (C) Copyright John Maddock 2006. // 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 template void test_spots(T) { // // basic sanity checks, tolerance is 10 decimal places expressed as a percentage, // One check per domain of the implementation: // T tolerance = boost::math::tools::epsilon() * 100 * 2; // 2 eps as a persent BOOST_CHECK_CLOSE( ::boost::math::factorial(0), static_cast(1), tolerance); BOOST_CHECK_CLOSE( ::boost::math::factorial(1), static_cast(1), tolerance); BOOST_CHECK_CLOSE( ::boost::math::factorial(10), static_cast(3628800L), tolerance); BOOST_CHECK_CLOSE( ::boost::math::unchecked_factorial(0), static_cast(1), tolerance); BOOST_CHECK_CLOSE( ::boost::math::unchecked_factorial(1), static_cast(1), tolerance); BOOST_CHECK_CLOSE( ::boost::math::unchecked_factorial(10), static_cast(3628800L), tolerance); tolerance = boost::math::tools::epsilon() * 100 * 20; // 20 eps as a persent unsigned i = boost::math::max_factorial::value; BOOST_CHECK_CLOSE( ::boost::math::unchecked_factorial(i), boost::math::tgamma(static_cast(i+1)), tolerance); i += 10; while(boost::math::lgamma(static_cast(i+1)) < boost::math::tools::log_max_value()) { BOOST_CHECK_CLOSE( ::boost::math::factorial(i), boost::math::tgamma(static_cast(i+1)), tolerance); i += 10; } } int test_main(int, char* []) { test_spots(0.0F); test_spots(0.0); test_spots(0.0L); test_spots(boost::math::concepts::real_concept(0.1)); return 0; }