]> www.ginac.de Git - ginac.git/blobdiff - check/exam_paranoia.cpp
- Complete revamp of methods in class matrix. Some redundant (and poor)
[ginac.git] / check / exam_paranoia.cpp
index b170f471ef0f979b65a8f4e14a1db893281f5921..2c6fe6ae627557f450fe8ea4dfd680bbc7fae628 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;
@@ -305,12 +305,37 @@ static unsigned exam_paranoia12(void)
        ex d = 4;
 
        if (!(f - d).expand().is_zero()) {
-               clog << "normal(" << e << ") returns " << f << " instead of " << d << endl;
+               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 d = (c*a-b*a)/(a-4);
+    
+    try {
+        ex f = e.normal();    
+        if (!(f - d).expand().is_zero()) {
+            clog << "normal(" << e << ") returns " << f
+                 << " instead of " << d << endl;
+            ++result;
+        }
+    } catch (const exception &err) {
+        clog << "normal(" << e << ") throws " << err.what() << endl;
+        ++result;
+    }
+       return result;
+}
+
 unsigned exam_paranoia(void)
 {
     unsigned result = 0;
@@ -330,6 +355,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;