cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
TestMonoInterp.cpp
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2013 by Gary J. Ferland and
2  * others. For conditions of distribution and use see copyright notice in license.txt */
3 #include <UnitTest++.h>
4 #include "cddefines.h"
5 #include "monointerp.h"
6 
7 #undef NUMVALS
8 #define NUMVALS(a) sizeof(a)/sizeof((a)[0])
9 
10 namespace {
11  static double xvals1[] = {0.0,1.0},
12  yvals1[] = {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
18  {
19  Monointerp m1, m2, m3;
20 
21  MonoInterpFixture () :
22  m1(xvals1,yvals1,NUMVALS(xvals1)),
23  m2(xvals2,yvals2,NUMVALS(xvals2)),
24  m3(xvals3,yvals3,NUMVALS(xvals3))
25  {}
26  ~MonoInterpFixture () {}
27  };
28  TEST_FIXTURE(MonoInterpFixture,TestMonoInterpLimits)
29  {
30  CHECK( fp_equal(0.0,m1(0.0)) );
31  CHECK( fp_equal(1.0,m1(1.0)) );
32  }
33  TEST_FIXTURE(MonoInterpFixture,TestMonoInterpInterp)
34  {
35  CHECK( fp_equal(0.5,m1(0.5)) );
36  CHECK( fp_equal(0.333,m1(0.333)) );
37  CHECK( fp_equal(0.99,m1(0.99)) );
38  }
39  TEST_FIXTURE(MonoInterpFixture,TestMonoInterpExtrap)
40  {
41  CHECK( fp_equal(0.,m1(-0.5)) );
42  CHECK( fp_equal(1.,m1(1.5)) );
43  }
44  TEST_FIXTURE(MonoInterpFixture,TestMonoInterpQuad)
45  {
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);
51  }
52  TEST_FIXTURE(MonoInterpFixture,TestMonoInterpQuadExtrap)
53  {
54  CHECK( fp_equal(yvals2[0],m2(-0.5)) );
55  CHECK( fp_equal(yvals2[NUMVALS(yvals2)-1],m2(NUMVALS(yvals2)-0.5)) );
56  }
57  TEST_FIXTURE(MonoInterpFixture,TestMonoInterpJump)
58  {
59  for (unsigned int i=0; i<NUMVALS(xvals3); ++i)
60  CHECK( fp_equal(yvals3[i],m3(xvals3[i])) );
61  }
62  TEST_FIXTURE(MonoInterpFixture,TestMonoInterpJumpExtrap)
63  {
64  CHECK( fp_equal(yvals3[0],m3(-0.5)) );
65  CHECK( fp_equal(yvals3[NUMVALS(yvals3)-1],m3(NUMVALS(yvals3)-0.5)) );
66  }
67  TEST_FIXTURE(MonoInterpFixture,TestMonoInterpJumpMonotonic)
68  {
69  const double eps=1e-5;
70  for (unsigned int i=0; i<NUMVALS(xvals3)-1; ++i)
71  {
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);
75  }
76  }
77 }
bool fp_equal(sys_float x, sys_float y, int n=3)
Definition: cddefines.h:816
#define NUMVALS(a)