]> www.ginac.de Git - ginac.git/blobdiff - check/time_uvar_gcd.cpp
pgcd(): detect relatively prime polynomials properly...
[ginac.git] / check / time_uvar_gcd.cpp
index ca5cc150296dd552b3419ebe524451ec0a8a637f..fe7589746a8d0ffa1835d85c82e38161dc842514 100644 (file)
@@ -1,8 +1,27 @@
-#include <string>
-#include <cassert>
-#include <iostream>
-#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 "timer.h"
 #include "error_report.h"
 #include "test_runner.h"
 #include "polynomial/remainder.h"
 #include "polynomial/mod_gcd.h"
 using namespace GiNaC;
 
+#include <string>
+#include <cassert>
+#include <iostream>
+
 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;
 }
-