1 /** @file exam_factor.cpp
3 * Factorization test suite. */
6 * GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26 using namespace GiNaC;
28 static symbol w("w"), x("x"), y("y"), z("z");
30 static unsigned check_factor(const ex& e)
33 ex answer = factor(ee);
34 if ( answer.expand() != ee || answer != e ) {
35 clog << "factorization of " << e << " == " << ee << " gave wrong result: " << answer << endl;
41 static unsigned exam_factor1()
49 e = ex("1+x-x^3", syms);
50 result += check_factor(e);
52 e = ex("1+x^6+x", syms);
53 result += check_factor(e);
55 e = ex("1-x^6+x", syms);
56 result += check_factor(e);
58 e = ex("(1+x)^3", syms);
59 result += check_factor(e);
61 e = ex("(x+1)*(x+4)", syms);
62 result += check_factor(e);
64 e = ex("x^6-3*x^5+x^4-3*x^3-x^2-3*x+1", syms);
65 result += check_factor(e);
67 e = ex("(-1+x)^3*(1+x)^3*(1+x^2)", syms);
68 result += check_factor(e);
70 e = ex("-(-168+20*x-x^2)*(30+x)", syms);
71 result += check_factor(e);
73 e = ex("x^2*(x-3)^2*(x^3-5*x+7)", syms);
74 result += check_factor(e);
76 e = ex("-6*x^2*(x-3)", syms);
77 result += check_factor(e);
79 e = ex("x^16+11*x^4+121", syms);
80 result += check_factor(e);
82 e = ex("x^8-40*x^6+352*x^4-960*x^2+576", syms);
83 result += check_factor(e);
85 e = ex("x*(2+x^2)*(1+x+x^3+x^2+x^6+x^5+x^4)*(1+x)^2*(1-x+x^2)^2*(-1+x)", syms);
86 result += check_factor(e);
88 e = ex("(x+4+x^2-x^3+43*x^4)*(x+1-x^2-3*x^3+4*x^4)", syms);
89 result += check_factor(e);
91 e = ex("-x^2*(x-1)*(1+x^2)", syms);
92 result += check_factor(e);
95 result += check_factor(e);
98 e = ex("(1+x)*(1+x^2-x^29-x^11-x^25-x^9-x^35+x^20-x^3+x^16-x^15-x-x^13+x^28+x^24-x^33+x^8-x^19+x^36+x^12-x^27+x^10-x^23+x^18+x^14+x^34-x^31+x^32+x^30-x^5+x^26+x^4+x^22-x^21-x^7-x^17+x^6)", syms);
99 result += check_factor(e);
101 e = ex("(1+4*x)*x^2*(1-4*x+16*x^2)*(3+5*x+92*x^3)", syms);
102 result += check_factor(e);
107 unsigned exam_factor()
111 cout << "examining polynomial factorization" << flush;
113 result += exam_factor1(); cout << '.' << flush;
118 int main(int argc, char** argv)
120 return exam_factor();