]> www.ginac.de Git - ginac.git/blobdiff - check/exam_paranoia.cpp
* Fix static initialization order fiasco.
[ginac.git] / check / exam_paranoia.cpp
index 1104ebe9ed3c9ffc47c4358e9e40ce0a823e9772..b5ae9baf416ccc573411c27fb5487a3db98eea6e 100644 (file)
@@ -6,7 +6,7 @@
  *  these oopses for good, so we run those stupid tests... */
 
 /*
- *  GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2004 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
@@ -375,7 +375,7 @@ static unsigned exam_paranoia15()
 static unsigned exam_paranoia16()
 {
        unsigned result = 0;
-       symbol a("a"), b("b"), c("c"), d("d");
+       symbol a("a"), b("b"), c("c"), d("d"), e("e");
        ex e1, e2, e3;
 
        e1 = pow(1+a*sqrt(b+c), 2);
@@ -402,6 +402,38 @@ static unsigned exam_paranoia16()
                ++result;
        }
 
+       e1 = pow(sqrt(a+b)+sqrt(c+d), 3);
+       e2 = e1.expand();
+
+       if (e2.has(3*(a+b)*sqrt(c+d)) || e2.has(3*(c+d)*sqrt(a+b))) {
+               clog << "expand(" << e1 << ") didn't fully expand\n";
+               ++result;
+       }
+
+       e1 = a*(b+c*(d+e));
+       e2 = e1.expand();
+
+       if (e2.has(c*(d+e))) {
+               clog << "expand(" << e1 << ") didn't fully expand\n";
+               ++result;
+       }
+
+       e1 = 2*pow(1+a, 2)/a;
+       e2 = e1.expand();
+
+       if (e2.has(pow(a, 2))) {
+               clog << "expand(" << e1 << ") didn't fully expand\n";
+               ++result;
+       }
+
+       e1 = a*(a+b);
+       e2 = pow(pow(e1, -1), -1);
+
+       if (e2.has(a*b)) {
+               clog << "double reciprocal expanded where it should not\n";
+               ++result;
+       }
+
        return result;
 }