X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=check%2Fexam_inifcns.cpp;h=cad9c8357827977e51cc04765add880a7269046f;hp=2fe28415ecaed6c8734b8396b5ceb6db14a88e1f;hb=24064b43ff0aebda40b1b4605fa6abc2920b4518;hpb=13964f3416ec9de8829b57d4a2bbd9fe9a6db4ef diff --git a/check/exam_inifcns.cpp b/check/exam_inifcns.cpp index 2fe28415..cad9c835 100644 --- a/check/exam_inifcns.cpp +++ b/check/exam_inifcns.cpp @@ -4,7 +4,7 @@ * functions. */ /* - * GiNaC Copyright (C) 1999-2011 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2015 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 @@ -232,6 +232,12 @@ static unsigned inifcns_consist_abs() if (!abs(pow(p,a+I*b)).eval().is_equal(pow(p,a))) ++result; + if (!abs(sqrt(p)).eval().is_equal(sqrt(p))) + ++result; + + if (!abs(-sqrt(p)).eval().is_equal(sqrt(p))) + ++result; + // also checks that abs(p)=p if (!abs(pow(p,a+I*b)).eval().is_equal(pow(p,a))) ++result; @@ -287,6 +293,7 @@ static unsigned inifcns_consist_exp() static unsigned inifcns_consist_log() { + using GiNaC::log; unsigned result = 0; symbol z("a"), w("b"); realsymbol a("a"), b("b"); @@ -343,6 +350,71 @@ static unsigned inifcns_consist_various() return result; } +/* Several tests for derivatives */ +static unsigned inifcns_consist_derivatives() +{ + unsigned result = 0; + symbol z, w; + realsymbol x; + ex e, e1; + + e=pow(x,z).conjugate().diff(x); + e1=pow(x,z).conjugate()*z.conjugate()/x; + if (! (e-e1).normal().is_zero() ) { + clog << "ERROR: pow(x,z).conjugate().diff(x) " << e << " != " << e1 << endl; + ++result; + } + + e=pow(w,z).conjugate().diff(w); + e1=pow(w,z).conjugate()*z.conjugate()/w; + if ( (e-e1).normal().is_zero() ) { + clog << "ERROR: pow(w,z).conjugate().diff(w) " << e << " = " << e1 << endl; + ++result; + } + + e=atanh(x).imag_part().diff(x); + if (! e.is_zero() ) { + clog << "ERROR: atanh(x).imag_part().diff(x) " << e << " != 0" << endl; + ++result; + } + + e=atanh(w).imag_part().diff(w); + if ( e.is_zero() ) { + clog << "ERROR: atanh(w).imag_part().diff(w) " << e << " = 0" << endl; + ++result; + } + + e=atanh(x).real_part().diff(x); + e1=pow(1-x*x,-1); + if (! (e-e1).normal().is_zero() ) { + clog << "ERROR: atanh(x).real_part().diff(x) " << e << " != " << e1 << endl; + ++result; + } + + e=atanh(w).real_part().diff(w); + e1=pow(1-w*w,-1); + if ( (e-e1).normal().is_zero() ) { + clog << "ERROR: atanh(w).real_part().diff(w) " << e << " = " << e1 << endl; + ++result; + } + + e=abs(log(z)).diff(z); + e1=(conjugate(log(z))/z+log(z)/conjugate(z))/abs(log(z))/2; + if (! (e-e1).normal().is_zero() ) { + clog << "ERROR: abs(log(z)).diff(z) " << e << " != " << e1 << endl; + ++result; + } + + e=Order(pow(x,4)).diff(x); + e1=Order(pow(x,3)); + if (! (e-e1).normal().is_zero() ) { + clog << "ERROR: Order(pow(x,4)).diff(x) " << e << " != " << e1 << endl; + ++result; + } + + return result; +} + unsigned exam_inifcns() { unsigned result = 0; @@ -357,6 +429,7 @@ unsigned exam_inifcns() result += inifcns_consist_exp(); cout << '.' << flush; result += inifcns_consist_log(); cout << '.' << flush; result += inifcns_consist_various(); cout << '.' << flush; + result += inifcns_consist_derivatives(); cout << '.' << flush; return result; }