]> www.ginac.de Git - ginac.git/blobdiff - check/exam_paranoia.cpp
- added check for normal((b*a-c*a)/(4-a)) bug
[ginac.git] / check / exam_paranoia.cpp
index b170f471ef0f979b65a8f4e14a1db893281f5921..6fe0f0972924872b7508482748c551e2787e5520 100644 (file)
@@ -220,8 +220,8 @@ static unsigned exam_paranoia8(void)
             clog << "normal(-x/(x+1)) returns " << f << " instead of -x/(x+1)\n";
             ++result;
         }
-    } catch (const exception &e) {
-        clog << "normal(-x/(x+1) throws " << e.what() << endl;
+    } catch (const exception &err) {
+        clog << "normal(-x/(x+1) throws " << err.what() << endl;
         ++result;
     }
     return result;
@@ -265,8 +265,8 @@ static unsigned exam_paranoia10(void)
             clog << "2^(3/2) erroneously returned " << r << " instead of 2*sqrt(2)" << endl;
             ++result;
         }
-    } catch (const exception &e) {
-        clog << "2^(3/2) throws " << e.what() << endl;
+    } catch (const exception &err) {
+        clog << "2^(3/2) throws " << err.what() << endl;
         ++result;
     }
     return result;
@@ -304,6 +304,25 @@ static unsigned exam_paranoia12(void)
        ex f = e.normal();
        ex d = 4;
 
+       if (!(f - d).expand().is_zero()) {
+               clog << "normal(" << e << ") returns " << f
+             << " instead of " << d << endl;
+               ++result;
+       }
+       return result;
+}
+
+// This one caused a division by 0 because heur_gcd() didn't check its
+// input polynomials against 0. Fixed on Aug 4th 2000.
+static unsigned exam_paranoia13(void)
+{
+    unsigned result = 0;
+       symbol a("a"), b("b"), c("c");
+
+       ex e = (b*a-c*a)/(4-a);
+       ex f = e.normal();
+       ex d = (c*a-b*a)/(a-4);
+
        if (!(f - d).expand().is_zero()) {
                clog << "normal(" << e << ") returns " << f << " instead of " << d << endl;
                ++result;
@@ -330,6 +349,7 @@ unsigned exam_paranoia(void)
     result += exam_paranoia10();  cout << '.' << flush;
     result += exam_paranoia11();  cout << '.' << flush;
     result += exam_paranoia12();  cout << '.' << flush;
+    result += exam_paranoia13();  cout << '.' << flush;
     
     if (!result) {
         cout << " passed " << endl;