16 #include <utl/SplineInterpolator.h>
18 #include <tst/Verify.h>
19 #include <cppunit/extensions/HelperMacros.h>
24 using boost::multi_array;
25 using namespace utl::Spline;
34 CPPUNIT_TEST(test1dmulti);
36 CPPUNIT_TEST(test2dmulti);
38 CPPUNIT_TEST(test3dmulti);
39 CPPUNIT_TEST_SUITE_END();
64 vector<double> vs(fNX);
65 for (
size_t i=0;i<fNX;++i)
67 const double d = double(i)/(fNX-1);
68 const double x = fX1*d + fX0*(1-d);
69 vs[i] = ExpectedValue(x);
73 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(), fX0, 1e-7));
74 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(), fX1, 1e-7));
76 for (
size_t i = 0; i < fNX*fOver; ++i) {
77 const double d = double(i)/(fNX*fOver-1);
78 const double x = fX1*d + fX0*(1-d);
79 const double vt = ExpectedValue(x);
80 CPPUNIT_ASSERT(Verify<CloseTo>(ip(x), vt, 1e-7));
87 multi_array<double,2> vs(boost::extents[2][fNX]);
88 for (
size_t i=0;i<fNX;++i)
90 const double d = double(i)/(fNX-1);
91 const double x = fX1*d + fX0*(1-d);
92 const double v = ExpectedValue(x);
98 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(), fX0, 1e-7));
99 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(), fX1, 1e-7));
101 vector<double>
out(2);
102 for (
size_t i = 0; i < fNX*fOver; ++i) {
103 const double d = double(i)/(fNX*fOver-1);
104 const double x = fX1*d + fX0*(1-d);
106 const double vt = ExpectedValue(x);
107 CPPUNIT_ASSERT(Verify<CloseTo>(out[0], vt , 1e-7));
108 CPPUNIT_ASSERT(Verify<CloseTo>(out[1], 2*vt, 1e-7));
115 multi_array<double,2> vs(boost::extents[fNX][fNY]);
116 for (
size_t i = 0; i < fNX; ++i)
117 for (
size_t j = 0; j < fNY; ++j)
119 const double di = double(i)/(fNX-1);
120 const double dj = double(j)/(fNY-1);
121 const double x = fX1*di + fX0*(1-di);
122 const double y = fY1*dj + fY0*(1-dj);
123 vs[i][j] = ExpectedValue(x) + ExpectedValue(y);
127 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(0), fX0, 1e-7));
128 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(0), fX1, 1e-7));
129 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(1), fY0, 1e-7));
130 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(1), fY1, 1e-7));
132 for (
size_t i = 0; i < fNX*fOver; ++i)
133 for (
size_t j = 0; j < fNY*fOver; ++j)
135 const double di = double(i)/(fNX*fOver-1);
136 const double dj = double(j)/(fNY*fOver-1);
137 const double x = fX1*di + fX0*(1-di);
138 const double y = fY1*dj + fY0*(1-dj);
139 const double vt = ExpectedValue(x) + ExpectedValue(y);
140 CPPUNIT_ASSERT(Verify<CloseTo>(ip(x,y), vt, 1e-7));
147 multi_array<double,3> vs(boost::extents[2][fNX][fNY]);
148 for (
size_t i = 0; i < fNX; ++i)
149 for (
size_t j = 0; j < fNY; ++j)
151 const double di = double(i)/(fNX-1);
152 const double dj = double(j)/(fNY-1);
153 const double x = fX1*di + fX0*(1-di);
154 const double y = fY1*dj + fY0*(1-dj);
155 const double vt = ExpectedValue(x) + ExpectedValue(y);
161 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(0), fX0, 1e-7));
162 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(0), fX1, 1e-7));
163 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(1), fY0, 1e-7));
164 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(1), fY1, 1e-7));
166 vector<double>
out(2);
167 for (
size_t i = 0; i < fNX*fOver; ++i)
168 for (
size_t j = 0; j < fNY*fOver; ++j)
170 const double di = double(i)/(fNX*fOver-1);
171 const double dj = double(j)/(fNY*fOver-1);
172 const double x = fX1*di + fX0*(1-di);
173 const double y = fY1*dj + fY0*(1-dj);
175 const double vt = ExpectedValue(x) + ExpectedValue(y);
176 CPPUNIT_ASSERT(Verify<CloseTo>(out[0], vt , 1e-7));
177 CPPUNIT_ASSERT(Verify<CloseTo>(out[1], 2*vt, 1e-7));
184 multi_array<double,3> vs(boost::extents[fNX][fNY][fNZ]);
185 for (
size_t i = 0; i < fNX; ++i)
186 for (
size_t j = 0; j < fNY; ++j)
187 for (
size_t k = 0; k < fNZ; ++k)
189 const double di = double(i)/(fNX-1);
190 const double dj = double(j)/(fNY-1);
191 const double dk = double(k)/(fNZ-1);
192 const double x = fX1*di + fX0*(1-di);
193 const double y = fY1*dj + fY0*(1-dj);
194 const double z = fZ1*dk + fZ0*(1-dk);
195 vs[i][j][k] = ExpectedValue(x)
201 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(0), fX0, 1e-7));
202 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(0), fX1, 1e-7));
203 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(1), fY0, 1e-7));
204 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(1), fY1, 1e-7));
205 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(2), fZ0, 1e-7));
206 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(2), fZ1, 1e-7));
208 for (
size_t i = 0; i < fNX*fOver; ++i)
209 for (
size_t j = 0; j < fNY*fOver; ++j)
210 for (
size_t k = 0; k < fNZ*fOver; ++k)
212 const double di = double(i)/(fNX*fOver-1);
213 const double dj = double(j)/(fNY*fOver-1);
214 const double dk = double(k)/(fNZ*fOver-1);
215 const double x = fX1*di + fX0*(1-di);
216 const double y = fY1*dj + fY0*(1-dj);
217 const double z = fZ1*dk + fZ0*(1-dk);
218 const double vt = ExpectedValue(x)
221 CPPUNIT_ASSERT(Verify<CloseTo>(ip(x,y,z), vt, 1e-7));
228 multi_array<double,4> vs(boost::extents[2][fNX][fNY][fNZ]);
229 for (
size_t i = 0; i < fNX; ++i)
230 for (
size_t j = 0; j < fNY; ++j)
231 for (
size_t k = 0; k < fNZ; ++k)
233 const double di = double(i)/(fNX-1);
234 const double dj = double(j)/(fNY-1);
235 const double dk = double(k)/(fNZ-1);
236 const double x = fX1*di + fX0*(1-di);
237 const double y = fY1*dj + fY0*(1-dj);
238 const double z = fZ1*dk + fZ0*(1-dk);
239 const double vt = ExpectedValue(x)
243 vs[1][i][j][k] = 2*vt;
247 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(0), fX0, 1e-7));
248 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(0), fX1, 1e-7));
249 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(1), fY0, 1e-7));
250 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(1), fY1, 1e-7));
251 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStart(2), fZ0, 1e-7));
252 CPPUNIT_ASSERT(Verify<CloseTo>(ip.
GetStop(2), fZ1, 1e-7));
254 vector<double>
out(2);
255 for (
size_t i = 0; i < fNX*fOver; ++i)
256 for (
size_t j = 0; j < fNY*fOver; ++j)
257 for (
size_t k = 0; k < fNZ*fOver; ++k)
259 const double di = double(i)/(fNX*fOver-1);
260 const double dj = double(j)/(fNY*fOver-1);
261 const double dk = double(k)/(fNZ*fOver-1);
262 const double x = fX1*di + fX0*(1-di);
263 const double y = fY1*dj + fY0*(1-dj);
264 const double z = fZ1*dk + fZ0*(1-dk);
266 const double vt = ExpectedValue(x)
269 CPPUNIT_ASSERT(Verify<CloseTo>(out[0], vt, 1e-7));
270 CPPUNIT_ASSERT(Verify<CloseTo>(out[1], 2*vt, 1e-7));
276 size_t fNX, fNY, fNZ, fOrder,
fOver;
277 double fX0, fX1, fY0, fY1, fZ0,
fZ1;
280 ExpectedValue(
const double x)
283 const double factors[] = { 2.9, 6.1, 9.5 };
285 for (
size_t o=0; o<fOrder; ++o)
286 result += factors[o]*
pow(x,
int(o));
double GetStart(const unsigned char dimension) const
double GetStart(const unsigned char dimension) const
vector< t2list > out
output of the algorithm: a list of clusters
double pow(const double x, const unsigned int i)
double GetStop(const unsigned char dimension) const
CPPUNIT_TEST_SUITE_REGISTRATION(testAiresShowerFile)
double GetStart(const unsigned char dimension) const
double GetStop(const unsigned char dimension) const
double GetStart(const unsigned char dimension) const
double GetStop(const unsigned char dimension) const
double GetStop(const unsigned char dimension) const