- unsigned result = 0;
- ex e;
-
- e = gamma(ex(1));
- for (int i=2; i<8; ++i)
- e += gamma(ex(i));
- if (e != numeric(874)) {
- clog << "gamma(1)+...+gamma(7) erroneously returned "
- << e << " instead of 874" << endl;
- ++result;
- }
-
- e = gamma(ex(1));
- for (int i=2; i<8; ++i)
- e *= gamma(ex(i));
- if (e != numeric(24883200)) {
- clog << "gamma(1)*...*gamma(7) erroneously returned "
- << e << " instead of 24883200" << endl;
- ++result;
- }
-
- e = gamma(ex(numeric(5, 2)))*gamma(ex(numeric(9, 2)))*64;
- if (e != 315*Pi) {
- clog << "64*gamma(5/2)*gamma(9/2) erroneously returned "
- << e << " instead of 315*Pi" << endl;
- ++result;
- }
-
- e = gamma(ex(numeric(-13, 2)));
- for (int i=-13; i<7; i=i+2)
- e += gamma(ex(numeric(i, 2)));
- e = (e*gamma(ex(numeric(15, 2)))*numeric(512));
- if (e != numeric(633935)*Pi) {
- clog << "512*(gamma(-13/2)+...+gamma(5/2))*gamma(15/2) erroneously returned "
- << e << " instead of 633935*Pi" << endl;
- ++result;
- }
-
- return result;
-}
-
-/* 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)
-{
- unsigned result = 0;
- symbol x;
- ex e, f;
-
- // We check psi(1) and psi(1/2) implicitly by calculating the curious
- // little identity gamma(1)'/gamma(1) - gamma(1/2)'/gamma(1/2) == 2*log(2).
- e += (gamma(x).diff(x)/gamma(x)).subs(x==numeric(1));
- e -= (gamma(x).diff(x)/gamma(x)).subs(x==numeric(1,2));
- if (e!=2*log(2)) {
- clog << "gamma(1)'/gamma(1) - gamma(1/2)'/gamma(1/2) erroneously returned "
- << e << " instead of 2*log(2)" << endl;
- ++result;
- }
-
- return result;
-}
-
-/* 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)
-{
- unsigned result = 0;
- ex e;
-
- for (int i=0; i<13; i+=2)
- e += zeta(i)/pow(Pi,i);
- if (e!=numeric(-204992279,638512875)) {
- clog << "zeta(0) + zeta(2) + ... + zeta(12) erroneously returned "
- << e << " instead of -204992279/638512875" << endl;
- ++result;
- }
-
- e = 0;
- for (int i=-1; i>-16; i--)
- e += zeta(i);
- if (e!=numeric(487871,1633632)) {
- clog << "zeta(-1) + zeta(-2) + ... + zeta(-15) erroneously returned "
- << e << " instead of 487871/1633632" << endl;
- ++result;
- }
-
- return result;
-}
-
-unsigned check_inifcns(void)
-{
- unsigned result = 0;
-
- cout << "checking consistency of symbolic functions" << flush;
- clog << "---------consistency of symbolic functions:" << endl;
-
- result += inifcns_consist_sin(); cout << '.' << flush;
- result += inifcns_consist_cos(); cout << '.' << flush;
- result += inifcns_consist_tan(); cout << '.' << flush;
- result += inifcns_consist_trans(); cout << '.' << flush;
- result += inifcns_consist_gamma(); cout << '.' << flush;
- result += inifcns_consist_psi(); cout << '.' << flush;
- result += inifcns_consist_zeta(); cout << '.' << flush;