10 #include <tst/Verify.h>
12 #include <utl/Trace.h>
13 #include <utl/MultiTrace.h>
14 #include <utl/TraceAlgorithm.h>
15 #include <utl/AugerException.h>
17 #include <cppunit/extensions/HelperMacros.h>
30 CPPUNIT_TEST(testEqualAndCopyCtor);
31 CPPUNIT_TEST(testFillTrace);
32 CPPUNIT_TEST(testOperators);
33 CPPUNIT_TEST(testAlgorithms);
34 CPPUNIT_TEST(testMultiTrace);
35 CPPUNIT_TEST(testCtor);
41 CPPUNIT_TEST_SUITE_END();
56 traceOfInts =
new TraceI(100, 100);
57 for (
int i = traceOfInts->GetStart(); i < int(traceOfInts->GetStop()); ++i)
58 (*traceOfInts)[i] = i;
60 traceOfDoubles =
new TraceD(3, 10);
63 it != traceOfDoubles->End(); ++it)
66 traceForCentroid =
new TraceD(3, 10);
67 (*traceForCentroid)[0] = 1.0;
68 (*traceForCentroid)[1] = 5.0;
69 (*traceForCentroid)[2] = 1.0;
71 traceOneElement =
new TraceI(1, 1);
72 (*traceOneElement)[0] = 1;
74 traceForMedian =
new TraceD(8, 1);
75 (*traceForMedian)[0] = -5;
76 (*traceForMedian)[1] = 0;
77 (*traceForMedian)[2] = 1000;
78 (*traceForMedian)[3] = 7.2;
79 (*traceForMedian)[4] = -1.8;
80 (*traceForMedian)[5] = 70;
81 (*traceForMedian)[6] = 4;
82 (*traceForMedian)[7] = 5;
84 traceForMedian2 =
new TraceI(8, 1);
85 (*traceForMedian2)[0] = -5;
86 (*traceForMedian2)[1] = 0;
87 (*traceForMedian2)[2] = 1000;
88 (*traceForMedian2)[3] = 7;
89 (*traceForMedian2)[4] = -2;
90 (*traceForMedian2)[5] = 70;
91 (*traceForMedian2)[6] = 4;
92 (*traceForMedian2)[7] = 5;
94 traceForMedian3 =
new TraceI(8, 1);
95 (*traceForMedian3)[0] = -5;
96 (*traceForMedian3)[1] = 0;
97 (*traceForMedian3)[2] = 1000;
98 (*traceForMedian3)[3] = 7;
99 (*traceForMedian3)[4] = -2;
100 (*traceForMedian3)[5] = 70;
101 (*traceForMedian3)[6] = 4;
102 (*traceForMedian3)[7] = 4;
109 delete traceOfDoubles;
110 delete traceForCentroid;
111 delete traceOneElement;
112 delete traceForMedian;
113 delete traceForMedian2;
114 delete traceForMedian3;
120 TraceI copyI(*traceOfInts);
121 CPPUNIT_ASSERT(copyI == *traceOfInts);
122 CPPUNIT_ASSERT(!(copyI != *traceOfInts));
123 TraceD copyD(*traceOfDoubles);
124 CPPUNIT_ASSERT(!(copyD != *traceOfDoubles));
130 CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[35], 35));
131 CPPUNIT_ASSERT(Verify<Equal>(traceOfInts->At(45), 45));
132 CPPUNIT_ASSERT(Verify<Equal>(traceOfInts->GetSize(),
TraceI::SizeType(100)));
133 CPPUNIT_ASSERT(Verify<Equal>(traceOfInts->GetSize(),
134 traceOfInts->GetStop() - traceOfInts->GetStart()));
138 TraceI copy(*traceOfInts);
140 it != copy.
End(); ++it, ++jt)
141 CPPUNIT_ASSERT(Verify<Equal>(*it, *jt));
146 short int uns[] = { 0, 1, 2 };
148 adopted.
Adopt(uns, 3);
150 CPPUNIT_ASSERT(Verify<Equal>(adopted[i],
int(i)));
158 CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[10], 30));
160 CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[20], 70));
162 CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[30], 90));
164 CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[40], 40));
168 TraceI copy = *traceOfInts;
170 CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[i], copy[i]));
175 const TraceI negTrace(-(*traceOfInts));
177 it != negTrace.
End(); ++it, ++jt)
178 CPPUNIT_ASSERT(Verify<Equal>(*it, -(*jt)));
183 const TraceI twiceTrace(*traceOfInts + (*traceOfInts));
185 CPPUNIT_ASSERT(Verify<Equal>(twiceTrace[i], 2*(*traceOfInts)[i]));
188 const TraceI addTrace(*traceOfInts + 13);
190 it != addTrace.
End(); ++it, ++jt)
191 CPPUNIT_ASSERT(Verify<Equal>(*it, *jt + 13));
194 const TraceI addLeftTrace(10 + (*traceOfInts));
196 it != addLeftTrace.
End(); ++it, ++jt)
197 CPPUNIT_ASSERT(Verify<Equal>(*it, 10 + (*jt)));
202 const TraceI zeroTrace(*traceOfInts - (*traceOfInts));
204 CPPUNIT_ASSERT(Verify<Equal>(*it, 0));
207 const TraceI subTrace(*traceOfInts - 13);
209 it != subTrace.
End(); ++it, ++jt)
210 CPPUNIT_ASSERT(Verify<Equal>(*it, *jt - 13));
213 const TraceI subLeftTrace(10 - (*traceOfInts));
215 it != subLeftTrace.
End(); ++it, ++jt)
216 CPPUNIT_ASSERT(Verify<Equal>(*it, 10 - (*jt)));
221 const TraceI sqrTrace(*traceOfInts * (*traceOfInts));
223 it != sqrTrace.
End(); ++it, ++jt)
224 CPPUNIT_ASSERT(Verify<Equal>(*it, (*jt)*(*jt)));
227 const TraceI mulTrace(*traceOfInts * 3);
229 it != mulTrace.
End(); ++it, ++jt)
230 CPPUNIT_ASSERT(Verify<Equal>(*it, *jt * 3));
233 const TraceI mulLeftTrace(2 * (*traceOfInts));
235 it != mulLeftTrace.
End(); ++it, ++jt)
236 CPPUNIT_ASSERT(Verify<Equal>(*it, 2 * (*jt)));
241 const TraceI divTrace(*traceOfInts / 5);
243 it != divTrace.
End(); ++it, ++jt)
244 CPPUNIT_ASSERT(Verify<Equal>(*it, *jt / 5));
249 const TraceD pTrace(*traceOfInts / 2.);
252 CPPUNIT_ASSERT(Verify<Equal>(*it, *jt / 2.));
261 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Min(*traceOneElement, 0, 0), 1.0));
262 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Min(*traceOfDoubles, 1, 1), 5.0));
263 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Min(*traceOfDoubles, 0, 2), 4.0));
265 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Max(*traceOneElement, 0, 0), 1.0));
266 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Max(*traceOfDoubles, 1, 1), 5.0));
267 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Max(*traceOfDoubles, 0, 2), 6.0));
269 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Median(*traceOneElement, 0, 0), 1.0));
270 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Median(*traceOfDoubles, 0, 2), 5.0));
271 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Median(*traceForMedian, 0, 7), 4.5));
272 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Median(*traceForMedian2, 0, 7), 4.5));
273 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Median(*traceForMedian3, 0, 7), 4.));
274 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Median(*traceForMedian, 0, 7, 1), 4.5));
275 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Median(*traceForMedian2, 0, 7, 1), 4.5));
276 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Median(*traceForMedian3, 0, 7, 1), 4.));
278 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Sum(*traceOfDoubles, 0, 2), 15.0));
282 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::RMS(*traceOfDoubles, 0, 2),
sqrt(2.0/3.0)));
283 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::RMS(*traceOfDoubles, 0, 1),
sqrt(0.25)));
284 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::RMS(*traceOfDoubles, 1, 1), 0.0));
286 CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Centroid(*traceForCentroid, 0, 2), 1.5));
313 CPPUNIT_ASSERT(Verify<Equal>(mtrace.
HasLabel(0),
true));
314 CPPUNIT_ASSERT(Verify<Equal>(mtrace.
HasLabel(1),
false));
319 CPPUNIT_ASSERT(Verify<Equal>(mtrace.
GetNLabels(), 3
U));
323 CPPUNIT_ASSERT(Verify<Equal>(traceSource[3], 3));
329 it != mtrace.
End(); ++it, ++i)
330 CPPUNIT_ASSERT(Verify<Equal>(it->GetLabel(), i));
338 it != mcopy.
End(); ++it, ++i) {
340 CPPUNIT_ASSERT(Verify<Equal>(it->GetLabel(), i));
342 const TraceI ta = it->GetTrace();
343 for (
int j = 0; j < 3; ++j)
344 CPPUNIT_ASSERT(Verify<Equal>(ta[j], j));
358 CPPUNIT_ASSERT(Verify<Equal>(*it, 10));
boost::transform_iterator< LabeledObjectFunctor, typename MultiObjectContainer::iterator, LabeledObjectType > Iterator
void Adopt(const T2 *const cArray, const SizeType size)
void AddTrace(const int size, const double binSize, const int label)
SizeType GetStop() const
Get valid data stop bin.
TraceD * traceForCentroid
boost::transform_iterator< LabeledObjectFunctor, typename MultiObjectContainer::const_iterator, LabeledObjectType > ConstIterator
CPPUNIT_TEST_SUITE_REGISTRATION(testAiresShowerFile)
std::vector< int >::const_iterator ConstIterator
std::vector< int >::size_type SizeType
void testEqualAndCopyCtor()
SizeType GetStart() const
Get valid data start bin.
Trace< T > & GetTrace(const int label=0)
Returns the trace for /par source.
Exception thrown when trying to access invalid bounds in Trace.
unsigned int GetNLabels() const
double Mean(const std::vector< double > &v)
std::vector< double >::iterator Iterator
bool HasLabel(const int label) const