13 #include <utl/Integrator.h>
15 #include <tst/Verify.h>
16 #include <cppunit/extensions/HelperMacros.h>
28 SinFunctor(
const double frequency,
const double amplitude)
29 : fFrequency(frequency), fAmplitude(amplitude) { }
32 {
return fAmplitude * sin(fFrequency * x); }
48 { ++fCounter;
return log(x); }
75 CPPUNIT_TEST(testFactory);
76 CPPUNIT_TEST(testRomberg);
77 CPPUNIT_TEST(testTrapezoidal);
78 CPPUNIT_TEST(testSimpson);
79 CPPUNIT_TEST(testCancellation);
80 CPPUNIT_TEST(testZero);
81 CPPUNIT_TEST(testFunction);
82 CPPUNIT_TEST(testSpeed);
83 CPPUNIT_TEST_SUITE_END();
96 CPPUNIT_ASSERT(Verify<CloseTo>(res, 4/M_PI));
105 CPPUNIT_ASSERT(Verify<CloseTo>(res1, 4/M_PI, 1e-11));
109 CPPUNIT_ASSERT(Verify<CloseTo>(res2, 4/M_PI, 1e-11));
113 CPPUNIT_ASSERT(Verify<CloseTo>(res3, -4/M_PI, 1e-11));
123 CPPUNIT_ASSERT(Verify<CloseTo>(res1, 4/M_PI, 1e-5));
127 CPPUNIT_ASSERT(Verify<CloseTo>(res2, 4/M_PI, 1e-6));
131 CPPUNIT_ASSERT(Verify<CloseTo>(res3, -4/M_PI, 1e-5));
141 CPPUNIT_ASSERT(Verify<CloseTo>(res1, 4/M_PI, 1e-5));
145 CPPUNIT_ASSERT(Verify<CloseTo>(res2, 4/M_PI, 1e-6));
149 CPPUNIT_ASSERT(Verify<CloseTo>(res3, -4/M_PI, 1e-5));
159 CPPUNIT_ASSERT(Verify<CloseTo>(res1, 20/M_PI));
162 CPPUNIT_ASSERT(Verify<CloseTo>(res2, -20/M_PI));
171 CPPUNIT_ASSERT(Verify<CloseTo>(res1, 0.));
174 CPPUNIT_ASSERT(Verify<CloseTo>(res2, 0.));
177 CPPUNIT_ASSERT(Verify<CloseTo>(res3, 0.));
181 CPPUNIT_ASSERT(Verify<CloseTo>(resa, 0.));
184 CPPUNIT_ASSERT(Verify<CloseTo>(resb, 0.));
187 CPPUNIT_ASSERT(Verify<CloseTo>(resc, 0.));
194 CPPUNIT_ASSERT(Verify<CloseTo>(res, 1.));
200 const double eps = 1e-9;
204 CPPUNIT_ASSERT(Verify<CloseTo>(ress, 1.));
208 CPPUNIT_ASSERT(Verify<CloseTo>(rest, 1.));
212 CPPUNIT_ASSERT(Verify<CloseTo>(resr, 1.));
214 cerr <<
"\nNumber of function calls:\n"
215 " Romberg " << nr <<
"\n"
216 " Simpson " << ns <<
"\n"
double MyLog(const double x)
Class for integration of functions with one independent parameter.
double operator()(const double x)
double GetTrapezoidalIntegral(const double a, const double b, const int minLevel=4, const int maxLevel=20) const
basic trapezoidal integration
CPPUNIT_TEST_SUITE_REGISTRATION(testAiresShowerFile)
double GetSimpsonIntegral(const double a, const double b, const int minLevel=4, const int maxLevel=20) const
Simpson improvement build on top of the trapezoidal integration.
double operator()(const double x) const
bool Verify(const Predicate &pred, const T &lhs, const T &rhs)
Test condition by evaluating a predicate and print on failure.
SinFunctor(const double frequency, const double amplitude)
Integrator< Functor > MakeIntegrator(Functor &f)
convenience factory
double GetRombergIntegral(const double a, const double b, const int order=5, const int maxIterations=20) const
Romberg integration Setting order to 2 is equivalent to the Simpson's method.