X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=check%2Ftime_uvar_gcd.cpp;h=fe7589746a8d0ffa1835d85c82e38161dc842514;hp=1a073ea3872015616360b7ad7fdb63852a3d073b;hb=05aa307b632d8dabdf5aff96d1a0f57d94836a69;hpb=c7d9b624cb4bd5658a36fbcac2f73dbdb99edd5f diff --git a/check/time_uvar_gcd.cpp b/check/time_uvar_gcd.cpp index 1a073ea3..fe758974 100644 --- a/check/time_uvar_gcd.cpp +++ b/check/time_uvar_gcd.cpp @@ -1,15 +1,38 @@ -#include -#include -#include -#include "timer.h" +/** @file time_uvar_gcd.cpp + * + * Time the different GCD algorithms. */ + +/* + * GiNaC Copyright (C) 1999-2009 Johannes Gutenberg University Mainz, Germany + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + #include "ginac.h" -#include "error_report.hpp" +#include "timer.h" +#include "error_report.h" #include "test_runner.h" -#include "polynomial/remainder.tcc" -#include "polynomial/upoly.hpp" -#include "polynomial/mod_gcd.hpp" +#include "polynomial/remainder.h" +#include "polynomial/upoly.h" +#include "polynomial/mod_gcd.h" using namespace GiNaC; +#include +#include +#include + static const std::string p1_srep("\ -936639990+26248623452*x^47-30174373832*x^46-19627087954*x^45 \ +23532819511*x^24-15331409214*x^23-5892518210*x^22-2954269379*x^28 \ @@ -1634,11 +1657,11 @@ gcd_sanity_check(const upoly& g, const upoly& a, const upoly& b, { upoly r1, r2; remainder_in_ring(r1, a, g); - bug_on(!r1.empty(), "bug: " << label << " : gcd g = \"" << g << + cbug_on(!r1.empty(), "bug: " << label << " : gcd g = \"" << g << "\"does not divide a =\"" << a << "\""); remainder_in_ring(r2, b, g); - bug_on(!r2.empty(), "bug: " << label << " : gcd g = \"" << g << + cbug_on(!r2.empty(), "bug: " << label << " : gcd g = \"" << g << "\"does not divide b =\"" << b << "\""); return true; } @@ -1690,7 +1713,7 @@ struct heur_gcd_test return false; gcd_sanity_check(g, a, b, std::string("heur_gcd")); - bug_on(g != g_check, + cbug_on(g != g_check, "modular and heuristic GCD disagree: " << "a = \"" << a << "\", b = \"" << b << "\", " << "mod_gcd = \"" << g_check << "\", " << @@ -1733,7 +1756,7 @@ struct sr_gcd_test bool check() const { gcd_sanity_check(g, a, b, std::string("sr_gcd")); - bug_on(g != g_check, + cbug_on(g != g_check, "modular and PRS GCD disagree: " << "a = \"" << a << "\", b = \"" << b << "\", " << "mod_gcd = \"" << g_check << "\", " << @@ -1757,7 +1780,8 @@ struct ex_sr_gcd_test const upoly& g_check; unsigned options; ex_sr_gcd_test(const ex& a_, const ex& b_, const upoly& g_) : - a(a_), b(b_), g(0), g_check(g_), options(gcd_options::no_heur_gcd) + a(a_), b(b_), g(0), g_check(g_), options(gcd_options::no_heur_gcd | + gcd_options::use_sr_gcd) { } inline void run() @@ -1772,7 +1796,7 @@ struct ex_sr_gcd_test upoly g_gin; ex2upoly(g_gin, g); - bug_on(g_gin != g_check, "modular and old PRS GCD disagree: " << + cbug_on(g_gin != g_check, "modular and old PRS GCD disagree: " << "a = \"" << a << "\", b = \"" << b << "\", " << "old sr_gcd = \"" << g_gin << "\", " << "mod_gcd = \"" << g_check << "\""); @@ -1874,4 +1898,3 @@ static upoly make_random_upoly(const std::size_t deg) p[deg] = cln::random_I(biggish); return p; } -