]> www.ginac.de Git - ginac.git/blobdiff - check/exam_paranoia.cpp
Added series expansion for functions (classical) Li and S around x==0.
[ginac.git] / check / exam_paranoia.cpp
index 1104ebe9ed3c9ffc47c4358e9e40ce0a823e9772..7c82e48662d9181256a5ebc044edd2b501f3d3e4 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-2005 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
@@ -20,7 +20,7 @@
  *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
 #include "exams.h"
@@ -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;
 }