-#include <string>
-#include <cassert>
-#include <iostream>
-#include "timer.h"
+/** @file time_uvar_gcd.cpp
+ *
+ * Time the different GCD algorithms. */
+
+/*
+ * GiNaC Copyright (C) 1999-2010 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 \
{
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;
}
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 << "\", " <<
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 << "\", " <<
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()
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 << "\"");
p[deg] = cln::random_I(biggish);
return p;
}
-