Commit 7b8089d3 authored by Christopher Bruns's avatar Christopher Bruns
Browse files

Debug new spline code on Windows

parent 77cdc5f1
...@@ -41,7 +41,7 @@ namespace OpenMM { ...@@ -41,7 +41,7 @@ namespace OpenMM {
* SplineFitter provides routines for performing cubic spline interpolation. * SplineFitter provides routines for performing cubic spline interpolation.
*/ */
class SplineFitter { class OPENMM_EXPORT SplineFitter {
public: public:
/** /**
* Fit a natural cubic spline to a set of data points. The resulting spline interpolates all the * Fit a natural cubic spline to a set of data points. The resulting spline interpolates all the
......
...@@ -44,43 +44,43 @@ using namespace std; ...@@ -44,43 +44,43 @@ using namespace std;
void testNaturalSpline() { void testNaturalSpline() {
vector<double> x(20); vector<double> x(20);
vector<double> y(20); vector<double> y(20);
for (int i = 0; i < x.size(); i++) { for (unsigned int i = 0; i < x.size(); i++) {
x[i] = 0.5*i+0.1*sin(i); x[i] = 0.5*i+0.1*sin(double(i));
y[i] = sin(x[i]); y[i] = sin(double(x[i]));
} }
vector<double> deriv; vector<double> deriv;
SplineFitter::createNaturalSpline(x, y, deriv); SplineFitter::createNaturalSpline(x, y, deriv);
ASSERT_EQUAL_TOL(deriv[0], 0.0, 1e-6); ASSERT_EQUAL_TOL(deriv[0], 0.0, 1e-6);
ASSERT_EQUAL_TOL(deriv[deriv.size()-1], 0.0, 1e-6); ASSERT_EQUAL_TOL(deriv[deriv.size()-1], 0.0, 1e-6);
for (int i = 0; i < x.size(); i++) { for (unsigned int i = 0; i < x.size(); i++) {
ASSERT_EQUAL_TOL(y[i], SplineFitter::evaluateSpline(x, y, deriv, x[i]), 1e-6); ASSERT_EQUAL_TOL(y[i], SplineFitter::evaluateSpline(x, y, deriv, x[i]), 1e-6);
ASSERT_EQUAL_TOL(cos(x[i]), SplineFitter::evaluateSplineDerivative(x, y, deriv, x[i]), 0.05); ASSERT_EQUAL_TOL(cos(x[i]), SplineFitter::evaluateSplineDerivative(x, y, deriv, x[i]), 0.05);
} }
for (int i = 1; i < 9; i++) { for (int i = 1; i < 9; i++) {
ASSERT_EQUAL_TOL(sin(i), SplineFitter::evaluateSpline(x, y, deriv, i), 0.05); ASSERT_EQUAL_TOL(sin((double)i), SplineFitter::evaluateSpline(x, y, deriv, i), 0.05);
ASSERT_EQUAL_TOL(cos(i), SplineFitter::evaluateSplineDerivative(x, y, deriv, i), 0.05); ASSERT_EQUAL_TOL(cos((double)i), SplineFitter::evaluateSplineDerivative(x, y, deriv, i), 0.05);
} }
} }
void testPeriodicSpline() { void testPeriodicSpline() {
vector<double> x(26); vector<double> x(26);
vector<double> y(26); vector<double> y(26);
for (int i = 0; i < x.size()-1; i++) { for (unsigned int i = 0; i < x.size()-1; i++) {
x[i] = 0.5*i+0.1*sin(i); x[i] = 0.5*i+0.1*sin((double)i);
y[i] = sin(x[i]); y[i] = sin((double)x[i]);
} }
x[x.size()-1] = 4*M_PI; x[x.size()-1] = 4*M_PI;
y[y.size()-1] = y[0]; y[y.size()-1] = y[0];
vector<double> deriv; vector<double> deriv;
SplineFitter::createPeriodicSpline(x, y, deriv); SplineFitter::createPeriodicSpline(x, y, deriv);
ASSERT_EQUAL_TOL(deriv[0], deriv[deriv.size()-1], 1e-6); ASSERT_EQUAL_TOL(deriv[0], deriv[deriv.size()-1], 1e-6);
for (int i = 0; i < x.size(); i++) { for (unsigned int i = 0; i < x.size(); i++) {
ASSERT_EQUAL_TOL(y[i], SplineFitter::evaluateSpline(x, y, deriv, x[i]), 1e-6); ASSERT_EQUAL_TOL(y[i], SplineFitter::evaluateSpline(x, y, deriv, x[i]), 1e-6);
ASSERT_EQUAL_TOL(cos(x[i]), SplineFitter::evaluateSplineDerivative(x, y, deriv, x[i]), 0.05); ASSERT_EQUAL_TOL(cos(x[i]), SplineFitter::evaluateSplineDerivative(x, y, deriv, x[i]), 0.05);
} }
for (int i = 1; i < 9; i++) { for (int i = 1; i < 9; i++) {
ASSERT_EQUAL_TOL(sin(i), SplineFitter::evaluateSpline(x, y, deriv, i), 0.05); ASSERT_EQUAL_TOL(sin((double)i), SplineFitter::evaluateSpline(x, y, deriv, i), 0.05);
ASSERT_EQUAL_TOL(cos(i), SplineFitter::evaluateSplineDerivative(x, y, deriv, i), 0.05); ASSERT_EQUAL_TOL(cos((double)i), SplineFitter::evaluateSplineDerivative(x, y, deriv, i), 0.05);
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment