# include <f2cad/dcsevl.hpp>
test_result dcsevl(void)
{ bool ok = true;
// independent variable
integer N = 1;
double x = .5;
doublereal X[1];
X[0] = x;
// dependent variable
integer M = 1;
doublereal F[1];
// polynomial coefficients
integer n = 3;
double a[3];
doublereal A[3];
for(integer i = 0; i < n; i++)
{ a[i] = 1. / double(i+1);
A[i] = a[i];
}
// declare independent variables
f2cad::Independent(N, X);
F[0] = f2cad::dcsevl_(X, A, &n);
// declare dependent variables
f2cad::Dependent(M, F);
// evaluate the Chebyshev polynomials
double t_0 = 1.;
double t_1 = x;
double t_2 = 2. * x * t_1 - t_0;
// check function value
double value = f2cad::Value( F[0] );
double check = a[0] * t_0 / 2. + a[1] * t_1 + a[2] * t_2;
ok &= f2cad::near_equal(check, value, 1e-10, 1e-10);
// evaluate the Derivatives
double dt_0 = 0.;
double dt_1 = 1.;
double dt_2 = 2. * t_1 + 2. * x * dt_1 - dt_0;
value = f2cad::Partial<doublereal>(0, 0);
check = a[1] * dt_1 + a[2] * dt_2;
ok &= f2cad::near_equal(check, value, 1e-10, 1e-10);
if( ok )
return test_pass;
return test_fail;
}