/* * (C) Copyright Nick Thompson 2018. * 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 "multiprecision_config.hpp" #ifndef DISABLE_MP_TESTS #include #include #include #include #include using boost::multiprecision::int128_t; using boost::multiprecision::int256_t; using boost::integer::extended_euclidean; using boost::integer::gcd; template void test_extended_euclidean() { // Stress test: //Z max_arg = std::numeric_limits::max(); Z max_arg = 500; for (Z m = max_arg; m > 0; --m) { for (Z n = max_arg; n > 0; --n) { boost::integer::euclidean_result_t u = extended_euclidean(m, n); int256_t gcdmn = gcd(m, n); int256_t x = u.x; int256_t y = u.y; BOOST_TEST_EQ(u.gcd, gcdmn); BOOST_TEST_EQ(m*x + n*y, gcdmn); } } } int main() { test_extended_euclidean(); test_extended_euclidean(); test_extended_euclidean(); test_extended_euclidean(); return boost::report_errors();; } #else int main() { return 0; } #endif