@@ -3,7 +3,7 @@
*  Series expansion test (Laurent and Taylor series). */

/*
- *  GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2010 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
*  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

-#include <iostream>
#include "ginac.h"
-using namespace std;
using namespace GiNaC;

+#include <iostream>
+using namespace std;
+
static symbol x("x");

static unsigned check_series(const ex &e, const ex &point, const ex &d, int order = 8)
@@ -172,6 +173,7 @@ static unsigned exam_series3()
// Series exponentiation
static unsigned exam_series4()
{
+       using GiNaC::tgamma;
unsigned result = 0;
ex e, d;

@@ -210,6 +212,7 @@ static unsigned exam_series5()
// Series expansion of tgamma(-1)
static unsigned exam_series6()
{
+       using GiNaC::tgamma;
ex e = tgamma(2*x);
ex d = pow(x+1,-1)*numeric(1,4) +
pow(x+1,0)*(numeric(3,4) -
@@ -327,6 +330,7 @@ static unsigned exam_series11()
static unsigned exam_series12()
{
using GiNaC::log;
+       using GiNaC::atanh;

unsigned result = 0;
ex e, d;
@@ -365,6 +369,23 @@ static unsigned exam_series13()
return result;
}

+// Test if (1+x)^(1/x) can be expanded.
+static unsigned exam_series14()
+{
+       unsigned result = 0;
+
+       ex e = pow(1+x, sin(x)/x);
+       ex d = 1 + x - pow(x,3)/6 + Order(pow(x,4));
+       try {
+               result += check_series(e,0,d,4);
+       } catch (const pole_error& err) {
+               clog << "series expansion of " << e << " at 0 raised an exception." << endl;
+               ++result;
+       }
+
+       return result;
+}
+
unsigned exam_pseries()
{
unsigned result = 0;
@@ -384,6 +405,7 @@ unsigned exam_pseries()
result += exam_series11();  cout << '.' << flush;
result += exam_series12();  cout << '.' << flush;
result += exam_series13();  cout << '.' << flush;
+       result += exam_series14();  cout << '.' << flush;

return result;
}