⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common_factor_test.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{    char buf[20];    sprintf(buf,"%I64d", i);    os << buf;    return os;}inline ostream& operator<<(ostream& os, unsigned __int64 i){    char buf[20];    sprintf(buf,"%I64u", i);    os << buf;    return os;}#endif}  // namespace std// GCD testsBOOST_AUTO_TEST_SUITE( gcd_test_suite )// GCD on signed integer typesBOOST_AUTO_TEST_CASE_TEMPLATE( gcd_int_test, T, signed_test_types ){#ifndef BOOST_MSVC    using boost::math::gcd;#else    using namespace boost::math;#endif    // Originally from Boost.Rational tests    BOOST_CHECK_EQUAL( gcd<T>(  1,  -1), static_cast<T>( 1) );    BOOST_CHECK_EQUAL( gcd<T>( -1,   1), static_cast<T>( 1) );    BOOST_CHECK_EQUAL( gcd<T>(  1,   1), static_cast<T>( 1) );    BOOST_CHECK_EQUAL( gcd<T>( -1,  -1), static_cast<T>( 1) );    BOOST_CHECK_EQUAL( gcd<T>(  0,   0), static_cast<T>( 0) );    BOOST_CHECK_EQUAL( gcd<T>(  7,   0), static_cast<T>( 7) );    BOOST_CHECK_EQUAL( gcd<T>(  0,   9), static_cast<T>( 9) );    BOOST_CHECK_EQUAL( gcd<T>( -7,   0), static_cast<T>( 7) );    BOOST_CHECK_EQUAL( gcd<T>(  0,  -9), static_cast<T>( 9) );    BOOST_CHECK_EQUAL( gcd<T>( 42,  30), static_cast<T>( 6) );    BOOST_CHECK_EQUAL( gcd<T>(  6,  -9), static_cast<T>( 3) );    BOOST_CHECK_EQUAL( gcd<T>(-10, -10), static_cast<T>(10) );    BOOST_CHECK_EQUAL( gcd<T>(-25, -10), static_cast<T>( 5) );    BOOST_CHECK_EQUAL( gcd<T>(  3,   7), static_cast<T>( 1) );    BOOST_CHECK_EQUAL( gcd<T>(  8,   9), static_cast<T>( 1) );    BOOST_CHECK_EQUAL( gcd<T>(  7,  49), static_cast<T>( 7) );}// GCD on unmarked signed integer typeBOOST_AUTO_TEST_CASE( gcd_unmarked_int_test ){#ifndef BOOST_MSVC    using boost::math::gcd;#else    using namespace boost::math;#endif    // The regular signed-integer GCD function performs the unsigned version,    // then does an absolute-value on the result.  Signed types that are not    // marked as such (due to no std::numeric_limits specialization) may be off    // by a sign.    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(   1,  -1 )), MyInt2( 1) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(  -1,   1 )), MyInt2( 1) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(   1,   1 )), MyInt2( 1) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(  -1,  -1 )), MyInt2( 1) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(   0,   0 )), MyInt2( 0) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(   7,   0 )), MyInt2( 7) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(   0,   9 )), MyInt2( 9) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(  -7,   0 )), MyInt2( 7) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(   0,  -9 )), MyInt2( 9) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(  42,  30 )), MyInt2( 6) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(   6,  -9 )), MyInt2( 3) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>( -10, -10 )), MyInt2(10) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>( -25, -10 )), MyInt2( 5) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(   3,   7 )), MyInt2( 1) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(   8,   9 )), MyInt2( 1) );    BOOST_CHECK_EQUAL( abs(gcd<MyInt2>(   7,  49 )), MyInt2( 7) );}// GCD on unsigned integer typesBOOST_AUTO_TEST_CASE_TEMPLATE( gcd_unsigned_test, T, unsigned_test_types ){#ifndef BOOST_MSVC    using boost::math::gcd;#else    using namespace boost::math;#endif    // Note that unmarked types (i.e. have no std::numeric_limits    // specialization) are treated like non/unsigned types    BOOST_CHECK_EQUAL( gcd<T>( 1u,   1u), static_cast<T>( 1u) );    BOOST_CHECK_EQUAL( gcd<T>( 0u,   0u), static_cast<T>( 0u) );    BOOST_CHECK_EQUAL( gcd<T>( 7u,   0u), static_cast<T>( 7u) );    BOOST_CHECK_EQUAL( gcd<T>( 0u,   9u), static_cast<T>( 9u) );    BOOST_CHECK_EQUAL( gcd<T>(42u,  30u), static_cast<T>( 6u) );    BOOST_CHECK_EQUAL( gcd<T>( 3u,   7u), static_cast<T>( 1u) );    BOOST_CHECK_EQUAL( gcd<T>( 8u,   9u), static_cast<T>( 1u) );    BOOST_CHECK_EQUAL( gcd<T>( 7u,  49u), static_cast<T>( 7u) );}// GCD at compile-timeBOOST_AUTO_TEST_CASE( gcd_static_test ){#ifndef BOOST_MSVC    using boost::math::static_gcd;#else    using namespace boost::math;#endif    // Can't use "BOOST_CHECK_EQUAL", otherwise the "value" member will be    // disqualified as compile-time-only constant, needing explicit definition    BOOST_CHECK( (static_gcd< 1,  1>::value) == 1 );    BOOST_CHECK( (static_gcd< 0,  0>::value) == 0 );    BOOST_CHECK( (static_gcd< 7,  0>::value) == 7 );    BOOST_CHECK( (static_gcd< 0,  9>::value) == 9 );    BOOST_CHECK( (static_gcd<42, 30>::value) == 6 );    BOOST_CHECK( (static_gcd< 3,  7>::value) == 1 );    BOOST_CHECK( (static_gcd< 8,  9>::value) == 1 );    BOOST_CHECK( (static_gcd< 7, 49>::value) == 7 );}// TODO: non-built-in signed and unsigned integer tests, with and without// numeric_limits specialization; polynominal tests; note any changes if// built-ins switch to binary-GCD algorithmBOOST_AUTO_TEST_SUITE_END()// LCM testsBOOST_AUTO_TEST_SUITE( lcm_test_suite )// LCM on signed integer typesBOOST_AUTO_TEST_CASE_TEMPLATE( lcm_int_test, T, signed_test_types ){#ifndef BOOST_MSVC    using boost::math::lcm;#else    using namespace boost::math;#endif    // Originally from Boost.Rational tests    BOOST_CHECK_EQUAL( lcm<T>(  1,  -1), static_cast<T>( 1) );    BOOST_CHECK_EQUAL( lcm<T>( -1,   1), static_cast<T>( 1) );    BOOST_CHECK_EQUAL( lcm<T>(  1,   1), static_cast<T>( 1) );    BOOST_CHECK_EQUAL( lcm<T>( -1,  -1), static_cast<T>( 1) );    BOOST_CHECK_EQUAL( lcm<T>(  0,   0), static_cast<T>( 0) );    BOOST_CHECK_EQUAL( lcm<T>(  6,   0), static_cast<T>( 0) );    BOOST_CHECK_EQUAL( lcm<T>(  0,   7), static_cast<T>( 0) );    BOOST_CHECK_EQUAL( lcm<T>( -5,   0), static_cast<T>( 0) );    BOOST_CHECK_EQUAL( lcm<T>(  0,  -4), static_cast<T>( 0) );    BOOST_CHECK_EQUAL( lcm<T>( 18,  30), static_cast<T>(90) );    BOOST_CHECK_EQUAL( lcm<T>( -6,   9), static_cast<T>(18) );    BOOST_CHECK_EQUAL( lcm<T>(-10, -10), static_cast<T>(10) );    BOOST_CHECK_EQUAL( lcm<T>( 25, -10), static_cast<T>(50) );    BOOST_CHECK_EQUAL( lcm<T>(  3,   7), static_cast<T>(21) );    BOOST_CHECK_EQUAL( lcm<T>(  8,   9), static_cast<T>(72) );    BOOST_CHECK_EQUAL( lcm<T>(  7,  49), static_cast<T>(49) );}// LCM on unmarked signed integer typeBOOST_AUTO_TEST_CASE( lcm_unmarked_int_test ){#ifndef BOOST_MSVC    using boost::math::lcm;#else    using namespace boost::math;#endif    // The regular signed-integer LCM function performs the unsigned version,    // then does an absolute-value on the result.  Signed types that are not    // marked as such (due to no std::numeric_limits specialization) may be off    // by a sign.    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(   1,  -1 )), MyInt2( 1) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(  -1,   1 )), MyInt2( 1) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(   1,   1 )), MyInt2( 1) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(  -1,  -1 )), MyInt2( 1) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(   0,   0 )), MyInt2( 0) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(   6,   0 )), MyInt2( 0) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(   0,   7 )), MyInt2( 0) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(  -5,   0 )), MyInt2( 0) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(   0,  -4 )), MyInt2( 0) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(  18,  30 )), MyInt2(90) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(  -6,   9 )), MyInt2(18) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>( -10, -10 )), MyInt2(10) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(  25, -10 )), MyInt2(50) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(   3,   7 )), MyInt2(21) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(   8,   9 )), MyInt2(72) );    BOOST_CHECK_EQUAL( abs(lcm<MyInt2>(   7,  49 )), MyInt2(49) );}// LCM on unsigned integer typesBOOST_AUTO_TEST_CASE_TEMPLATE( lcm_unsigned_test, T, unsigned_test_types ){#ifndef BOOST_MSVC    using boost::math::lcm;#else    using namespace boost::math;#endif    // Note that unmarked types (i.e. have no std::numeric_limits    // specialization) are treated like non/unsigned types    BOOST_CHECK_EQUAL( lcm<T>( 1u,   1u), static_cast<T>( 1u) );    BOOST_CHECK_EQUAL( lcm<T>( 0u,   0u), static_cast<T>( 0u) );    BOOST_CHECK_EQUAL( lcm<T>( 6u,   0u), static_cast<T>( 0u) );    BOOST_CHECK_EQUAL( lcm<T>( 0u,   7u), static_cast<T>( 0u) );    BOOST_CHECK_EQUAL( lcm<T>(18u,  30u), static_cast<T>(90u) );    BOOST_CHECK_EQUAL( lcm<T>( 3u,   7u), static_cast<T>(21u) );    BOOST_CHECK_EQUAL( lcm<T>( 8u,   9u), static_cast<T>(72u) );    BOOST_CHECK_EQUAL( lcm<T>( 7u,  49u), static_cast<T>(49u) );}// LCM at compile-timeBOOST_AUTO_TEST_CASE( lcm_static_test ){#ifndef BOOST_MSVC    using boost::math::static_lcm;#else    using namespace boost::math;#endif    // Can't use "BOOST_CHECK_EQUAL", otherwise the "value" member will be    // disqualified as compile-time-only constant, needing explicit definition    BOOST_CHECK( (static_lcm< 1,  1>::value) ==  1 );    BOOST_CHECK( (static_lcm< 0,  0>::value) ==  0 );    BOOST_CHECK( (static_lcm< 6,  0>::value) ==  0 );    BOOST_CHECK( (static_lcm< 0,  7>::value) ==  0 );    BOOST_CHECK( (static_lcm<18, 30>::value) == 90 );    BOOST_CHECK( (static_lcm< 3,  7>::value) == 21 );    BOOST_CHECK( (static_lcm< 8,  9>::value) == 72 );    BOOST_CHECK( (static_lcm< 7, 49>::value) == 49 );}// TODO: see GCD to-doBOOST_AUTO_TEST_SUITE_END()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -