X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=check%2Fexam_inifcns.cpp;h=b86b4703cf7306dcc623badebbeebb94cfd05aec;hp=91307518eb3b9156b8c7d6648a60d8c1381bfb8c;hb=931ece4838fcef7b9ec71761d224e2e1cd11a89d;hpb=ae3044935ddf13dd325f6e11770357b99bbe6095 diff --git a/check/exam_inifcns.cpp b/check/exam_inifcns.cpp index 91307518..b86b4703 100644 --- a/check/exam_inifcns.cpp +++ b/check/exam_inifcns.cpp @@ -4,7 +4,7 @@ * functions. */ /* - * GiNaC Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2008 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 @@ -18,14 +18,19 @@ * * 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" +#include +#include "ginac.h" +using namespace std; +using namespace GiNaC; /* Assorted tests on other transcendental functions. */ -static unsigned inifcns_consist_trans(void) +static unsigned inifcns_consist_trans() { + using GiNaC::asin; using GiNaC::acos; + unsigned result = 0; symbol x("x"); ex chk; @@ -90,17 +95,38 @@ static unsigned inifcns_consist_trans(void) ++result; } + // check consistency of log and eta phases: + for (int r1=-1; r1<=1; ++r1) { + for (int i1=-1; i1<=1; ++i1) { + ex x1 = r1+I*i1; + if (x1.is_zero()) + continue; + for (int r2=-1; r2<=1; ++r2) { + for (int i2=-1; i2<=1; ++i2) { + ex x2 = r2+I*i2; + if (x2.is_zero()) + continue; + if (abs(evalf(eta(x1,x2)-log(x1*x2)+log(x1)+log(x2)))>.1e-12) { + clog << "either eta(x,y), log(x), log(y) or log(x*y) is wrong" + << " at x==" << x1 << ", y==" << x2 << endl; + ++result; + } + } + } + } + } + return result; } /* Simple tests on the tgamma function. We stuff in arguments where the results * exists in closed form and check if it's ok. */ -static unsigned inifcns_consist_gamma(void) +static unsigned inifcns_consist_gamma() { unsigned result = 0; ex e; - e = tgamma(ex(1)); + e = tgamma(1); for (int i=2; i<8; ++i) e += tgamma(ex(i)); if (e != numeric(874)) { @@ -109,7 +135,7 @@ static unsigned inifcns_consist_gamma(void) ++result; } - e = tgamma(ex(1)); + e = tgamma(1); for (int i=2; i<8; ++i) e *= tgamma(ex(i)); if (e != numeric(24883200)) { @@ -140,8 +166,10 @@ static unsigned inifcns_consist_gamma(void) /* Simple tests on the Psi-function (aka polygamma-function). We stuff in arguments where the result exists in closed form and check if it's ok. */ -static unsigned inifcns_consist_psi(void) +static unsigned inifcns_consist_psi() { + using GiNaC::log; + unsigned result = 0; symbol x; ex e, f; @@ -162,7 +190,7 @@ static unsigned inifcns_consist_psi(void) /* Simple tests on the Riemann Zeta function. We stuff in arguments where the * result exists in closed form and check if it's ok. Of course, this checks * the Bernoulli numbers as a side effect. */ -static unsigned inifcns_consist_zeta(void) +static unsigned inifcns_consist_zeta() { unsigned result = 0; ex e; @@ -187,24 +215,21 @@ static unsigned inifcns_consist_zeta(void) return result; } -unsigned exam_inifcns(void) +unsigned exam_inifcns() { unsigned result = 0; cout << "examining consistency of symbolic functions" << flush; - clog << "----------consistency of symbolic functions:" << endl; result += inifcns_consist_trans(); cout << '.' << flush; result += inifcns_consist_gamma(); cout << '.' << flush; result += inifcns_consist_psi(); cout << '.' << flush; result += inifcns_consist_zeta(); cout << '.' << flush; - if (!result) { - cout << " passed " << endl; - clog << "(no output)" << endl; - } else { - cout << " failed " << endl; - } - return result; } + +int main(int argc, char** argv) +{ + return exam_inifcns(); +}