- Added Cint 5.4.25 to the list of working Cints
[ginac.git] / check / differentiation.cpp
index 3d49062b82b79b5784d274fe8c288f953aff2581..307bd59a6e0e4d6c85930b3281dc9738ac6e073e 100644 (file)
@@ -3,7 +3,7 @@
  *  Tests for symbolic differentiation, including various functions. */
 
 /*
  *  Tests for symbolic differentiation, including various functions. */
 
 /*
- *  GiNaC Copyright (C) 1999 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2000 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
  *
  *  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
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#include <ginac/ginac.h>
+#include "ginac.h"
+
+#ifndef NO_NAMESPACE_GINAC
 using namespace GiNaC;
 using namespace GiNaC;
+#endif // ndef NO_NAMESPACE_GINAC
 
 static unsigned check_diff(const ex &e, const symbol &x,
                            const ex &d, unsigned nth=1)
 {
     ex ed = e.diff(x, nth);
 
 static unsigned check_diff(const ex &e, const symbol &x,
                            const ex &d, unsigned nth=1)
 {
     ex ed = e.diff(x, nth);
-    if ((ed - d).compare(exZERO()) != 0) {
+    if ((ed - d).compare(ex(0)) != 0) {
         switch (nth) {
         case 0:
             clog << "zeroth ";
         switch (nth) {
         case 0:
             clog << "zeroth ";
@@ -164,6 +167,7 @@ static unsigned differentiation3(void)
     ex e1, e2, e, d;
 
     // construct expression e to be diff'ed:
     ex e1, e2, e, d;
 
     // construct expression e to be diff'ed:
+    e1 = y*pow(x, 2) + a*x + b;
     e2 = exp(e1);
     e = b*pow(e2, 2) + y*e2 + a;
     
     e2 = exp(e1);
     e = b*pow(e2, 2) + y*e2 + a;
     
@@ -191,6 +195,7 @@ static unsigned differentiation4(void)
     ex e1, e2, e, d;
     
     // construct expression e to be diff'ed:
     ex e1, e2, e, d;
     
     // construct expression e to be diff'ed:
+    e1 = y*pow(x, 2) + a*x + b;
     e2 = log(e1);
     e = b*pow(e2, 2) + y*e2 + a;
     
     e2 = log(e1);
     e = b*pow(e2, 2) + y*e2 + a;
     
@@ -232,10 +237,16 @@ static unsigned differentiation5(void)
          pow(y*b+pow(y,2)*x+a,-2)*pow(y,2))*
         pow(1+pow(a*x+b+y*pow(x,2),2)*pow(y*b+pow(y,2)*x+a,-2),-1);
     */
          pow(y*b+pow(y,2)*x+a,-2)*pow(y,2))*
         pow(1+pow(a*x+b+y*pow(x,2),2)*pow(y*b+pow(y,2)*x+a,-2),-1);
     */
+    /*
     d = pow(1+pow(a*x+b+y*pow(x,2),2)*pow(y*b+pow(y,2)*x+a,-2),-1)
         *pow(y*b+pow(y,2)*x+a,-1)*(a+2*y*x)
         +pow(y,2)*(-a*x-b-y*pow(x,2))*
         pow(pow(y*b+pow(y,2)*x+a,2)+pow(a*x+b+y*pow(x,2),2),-1);
     d = pow(1+pow(a*x+b+y*pow(x,2),2)*pow(y*b+pow(y,2)*x+a,-2),-1)
         *pow(y*b+pow(y,2)*x+a,-1)*(a+2*y*x)
         +pow(y,2)*(-a*x-b-y*pow(x,2))*
         pow(pow(y*b+pow(y,2)*x+a,2)+pow(a*x+b+y*pow(x,2),2),-1);
+    */
+    d = pow(y,2)*pow(pow(b+y*pow(x,2)+x*a,2)+pow(y*b+pow(y,2)*x+a,2),-1)*
+        (-b-y*pow(x,2)-x*a)+
+        pow(pow(b+y*pow(x,2)+x*a,2)+pow(y*b+pow(y,2)*x+a,2),-1)*
+        (y*b+pow(y,2)*x+a)*(2*y*x+a);
     result += check_diff(e, x, d);
     
     return result;
     result += check_diff(e, x, d);
     
     return result;
@@ -247,13 +258,13 @@ static unsigned differentiation6(void)
     symbol x("x");
     ex e, d, ed;
     
     symbol x("x");
     ex e, d, ed;
     
-    e = sin(x).series(x, exZERO(), 8);
-    d = cos(x).series(x, exZERO(), 7);
+    e = sin(x).series(x, 0, 8);
+    d = cos(x).series(x, 0, 7);
     ed = e.diff(x);
     ed = e.diff(x);
-    ed = static_cast<series *>(ed.bp)->convert_to_poly();
-    d = static_cast<series *>(d.bp)->convert_to_poly();
+    ed = series_to_poly(ed);
+    d = series_to_poly(d);
     
     
-    if ((ed - d).compare(exZERO()) != 0) {
+    if ((ed - d).compare(ex(0)) != 0) {
         clog << "derivative of " << e << " by " << x << " returned "
              << ed << " instead of " << d << ")" << endl;
         return 1;
         clog << "derivative of " << e << " by " << x << " returned "
              << ed << " instead of " << d << ")" << endl;
         return 1;