3 #include <UnitTest++.h>
8 #define NUMVALS(a) sizeof(a)/sizeof((a)[0])
11 static double xvals1[] = {0.0,1.0},
13 xvals2[] = {0.0,1.0,2.0,3.0,4.0},
14 yvals2[] = {0.0,1.0,4.0,9.0,16.0},
15 xvals3[] = {0.0,1.0, 2.0,3.0,4.0,5.0,6.0},
16 yvals3[] = {0.0,1.0,-1.0,2.0,1.0,1.0,0.0};
17 struct MonoInterpFixture
21 MonoInterpFixture () :
22 m1(xvals1,yvals1,
NUMVALS(xvals1)),
23 m2(xvals2,yvals2,
NUMVALS(xvals2)),
24 m3(xvals3,yvals3,
NUMVALS(xvals3))
26 ~MonoInterpFixture () {}
28 TEST_FIXTURE(MonoInterpFixture,TestMonoInterpLimits)
33 TEST_FIXTURE(MonoInterpFixture,TestMonoInterpInterp)
39 TEST_FIXTURE(MonoInterpFixture,TestMonoInterpExtrap)
44 TEST_FIXTURE(MonoInterpFixture,TestMonoInterpQuad)
46 for (
unsigned int i=0; i<
NUMVALS(xvals2); ++i)
47 CHECK(
fp_equal(yvals2[i],m2(xvals2[i])) );
48 CHECK_CLOSE(1.5*1.5,m2(1.5),5e-2);
49 CHECK_CLOSE(1.1*1.1,m2(1.1),5e-2);
50 CHECK_CLOSE(1.9*1.9,m2(1.9),5e-2);
52 TEST_FIXTURE(MonoInterpFixture,TestMonoInterpQuadExtrap)
54 CHECK(
fp_equal(yvals2[0],m2(-0.5)) );
57 TEST_FIXTURE(MonoInterpFixture,TestMonoInterpJump)
59 for (
unsigned int i=0; i<
NUMVALS(xvals3); ++i)
60 CHECK(
fp_equal(yvals3[i],m3(xvals3[i])) );
62 TEST_FIXTURE(MonoInterpFixture,TestMonoInterpJumpExtrap)
64 CHECK(
fp_equal(yvals3[0],m3(-0.5)) );
67 TEST_FIXTURE(MonoInterpFixture,TestMonoInterpJumpMonotonic)
69 const double eps=1e-5;
70 for (
unsigned int i=0; i<
NUMVALS(xvals3)-1; ++i)
72 CHECK((yvals3[i]-m3(xvals3[i]+eps))*(yvals3[i+1]-m3(xvals3[i]+eps))<=0);
73 CHECK((yvals3[i]-m3(xvals3[i+1]-eps))
74 *(yvals3[i+1]-m3(xvals3[i+1]-eps))<=0);
bool fp_equal(sys_float x, sys_float y, int n=3)