X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=check%2Fexam_paranoia.cpp;h=50b5cabd9eb1630eb6730cfd303ecb2f64d4c83d;hp=c4383c7cf6191aeef4a3c2b470a99733952ec6e5;hb=2dcbb3a4955e294d62b45c3db8bdccb7d6fdf833;hpb=af922d5eb36ed70e4a9e3ffaf4c24492cf89a1a6;ds=sidebyside diff --git a/check/exam_paranoia.cpp b/check/exam_paranoia.cpp index c4383c7c..50b5cabd 100644 --- a/check/exam_paranoia.cpp +++ b/check/exam_paranoia.cpp @@ -6,7 +6,7 @@ * these oopses for good, so we run those stupid tests... */ /* - * GiNaC Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2002 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 @@ -41,7 +41,7 @@ static unsigned exam_paranoia1(void) // In the first one expand did not do any job at all: if (!g.expand().is_equal(x)) { clog << "e = x*y*z; f = y*z; expand(e/f) erroneously returned " - << g.expand() << endl; + << g.expand() << endl; ++result; } @@ -49,7 +49,7 @@ static unsigned exam_paranoia1(void) e = pow(x + 1, -1); if (!e.expand().is_equal(e)) { clog << "expand(pow(x + 1, -1)) erroneously returned " - << e.expand() << endl; + << e.expand() << endl; ++result; } @@ -72,20 +72,20 @@ static unsigned exam_paranoia2(void) // After .expand(), g should be zero: if (!g.expand().is_zero()) { clog << "e = (x + z*x); f = e*y; expand(f - e*y) erroneously returned " - << g.expand() << endl; + << g.expand() << endl; ++result; } // After .eval(), g should be zero: if (!g.eval().is_zero()) { clog << "e = (x + z*x); f = e*y; eval(f - e*y) erroneously returned " - << g.eval() << endl; + << g.eval() << endl; ++result; } // This actually worked already back in April 1999. // But we are *very* paranoic! if (!g.expand().eval().is_zero()) { clog << "e = (x + z*x); f = e*y; eval(expand(f - e*y)) erroneously returned " - << g.expand().eval() << endl; + << g.expand().eval() << endl; ++result; } @@ -106,17 +106,17 @@ static unsigned exam_paranoia3(void) if (!f.is_equal(y)) { clog << "e = x*y - y; f = e.subs(x == 2) erroneously returned " - << f << endl; + << f << endl; ++result; } if (!f.eval().is_equal(y)) { clog << "e = x*y - y; eval(e.subs(x == 2)) erroneously returned " - << f.eval() << endl; + << f.eval() << endl; ++result; } if (!f.expand().is_equal(y)) { clog << "e = x*y - y; expand(e.subs(x == 2)) erroneously returned " - << f.expand() << endl; + << f.expand() << endl; ++result; } @@ -136,12 +136,12 @@ static unsigned exam_paranoia4(void) if (!g.is_zero()) { clog << "e = pow(x,2) + x + 1; f = pow(x,2) + x + 1; g = e-f; g erroneously returned " - << g << endl; + << g << endl; ++result; } if (!g.is_zero()) { clog << "e = pow(x,2) + x + 1; f = pow(x,2) + x + 1; g = e-f; g.eval() erroneously returned " - << g.eval() << endl; + << g.eval() << endl; ++result; } @@ -160,7 +160,7 @@ static unsigned exam_paranoia5(void) if (!(e-f).expand().is_zero()) { clog << "e = pow(x*y+1,2); f = pow(x,2)*pow(y,2) + 2*x*y + 1; (e-f).expand() erroneously returned " - << (e-f).expand() << endl; + << (e-f).expand() << endl; ++result; } @@ -196,8 +196,8 @@ static unsigned exam_paranoia7(void) if (f.nops() > 3) { clog << "e=y+y*x+2; f=expand(pow(e,2)-(e*y*(x+1))) has " - << f.nops() << " arguments instead of 3 ( f==" - << f << " )" << endl; + << f.nops() << " arguments instead of 3 ( f==" + << f << " )" << endl; ++result; } return result; @@ -306,7 +306,7 @@ static unsigned exam_paranoia12(void) if (!(f - d).expand().is_zero()) { clog << "normal(" << e << ") returns " << f - << " instead of " << d << endl; + << " instead of " << d << endl; ++result; } return result; @@ -326,7 +326,7 @@ static unsigned exam_paranoia13(void) ex f = e.normal(); if (!(f - d).expand().is_zero()) { clog << "normal(" << e << ") returns " << f - << " instead of " << d << endl; + << " instead of " << d << endl; ++result; } } catch (const exception &err) { @@ -336,6 +336,22 @@ static unsigned exam_paranoia13(void) return result; } +// A bug introduced on July 19, 2001. quo() and rem() would sometimes call +// vector::reserve() with a negative argument. Fixed on Dec 20, 2001. +static unsigned exam_paranoia14(void) +{ + unsigned result = 0; + symbol x("x"); + + ex q = quo(1, pow(x, 3), x); + if (!q.is_zero()) { + clog << "quo(1,x^3,x) erroneously returned " << q << " instead of 0\n"; + ++result; + } + + return result; +} + unsigned exam_paranoia(void) { unsigned result = 0; @@ -356,6 +372,7 @@ unsigned exam_paranoia(void) result += exam_paranoia11(); cout << '.' << flush; result += exam_paranoia12(); cout << '.' << flush; result += exam_paranoia13(); cout << '.' << flush; + result += exam_paranoia14(); cout << '.' << flush; if (!result) { cout << " passed " << endl;