testTraces.cc
Go to the documentation of this file.
1 
8 #include <iostream>
9 
10 #include <tst/Verify.h>
11 
12 #include <utl/Trace.h>
13 #include <utl/MultiTrace.h>
14 #include <utl/TraceAlgorithm.h>
15 #include <utl/AugerException.h>
16 
17 #include <cppunit/extensions/HelperMacros.h>
18 
19 using namespace std;
20 using namespace utl;
21 using namespace tst;
22 
23 
27 class testTraces : public CppUnit::TestFixture {
28 
29  CPPUNIT_TEST_SUITE(testTraces);
30  CPPUNIT_TEST(testEqualAndCopyCtor);
31  CPPUNIT_TEST(testFillTrace);
32  CPPUNIT_TEST(testOperators);
33  CPPUNIT_TEST(testAlgorithms);
34  CPPUNIT_TEST(testMultiTrace);
35  CPPUNIT_TEST(testCtor);
36  CPPUNIT_TEST_EXCEPTION(testBinException1, InvalidTraceBoundException);
37  CPPUNIT_TEST_EXCEPTION(testBinException2, InvalidTraceBoundException);
38 
39  // add tests for multitraces
40 
41  CPPUNIT_TEST_SUITE_END();
42 
43 private:
51 
52 public:
53  void
55  {
56  traceOfInts = new TraceI(100, 100);
57  for (int i = traceOfInts->GetStart(); i < int(traceOfInts->GetStop()); ++i)
58  (*traceOfInts)[i] = i;
59 
60  traceOfDoubles = new TraceD(3, 10);
61  double start = 4;
62  for (TraceD::Iterator it = traceOfDoubles->Begin();
63  it != traceOfDoubles->End(); ++it)
64  *it = start++;
65 
66  traceForCentroid = new TraceD(3, 10);
67  (*traceForCentroid)[0] = 1.0;
68  (*traceForCentroid)[1] = 5.0;
69  (*traceForCentroid)[2] = 1.0;
70 
71  traceOneElement = new TraceI(1, 1);
72  (*traceOneElement)[0] = 1;
73 
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;
83 
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;
93 
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;
103  }
104 
105  void
107  {
108  delete traceOfInts;
109  delete traceOfDoubles;
110  delete traceForCentroid;
111  delete traceOneElement;
112  delete traceForMedian;
113  delete traceForMedian2;
114  delete traceForMedian3;
115  }
116 
117  void
119  {
120  TraceI copyI(*traceOfInts);
121  CPPUNIT_ASSERT(copyI == *traceOfInts);
122  CPPUNIT_ASSERT(!(copyI != *traceOfInts));
123  TraceD copyD(*traceOfDoubles);
124  CPPUNIT_ASSERT(!(copyD != *traceOfDoubles));
125  }
126 
127  void
129  {
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()));
135 
136  // copy ctor
137  {
138  TraceI copy(*traceOfInts);
139  for (TraceI::Iterator it = copy.Begin(), jt = traceOfInts->Begin();
140  it != copy.End(); ++it, ++jt)
141  CPPUNIT_ASSERT(Verify<Equal>(*it, *jt));
142  }
143 
144  // adopt trace from array
145  {
146  short int uns[] = { 0, 1, 2 };
147  TraceI adopted;
148  adopted.Adopt(uns, 3);
149  for (TraceI::SizeType i = 0; i != adopted.GetSize(); ++i)
150  CPPUNIT_ASSERT(Verify<Equal>(adopted[i], int(i)));
151  }
152  }
153 
154  void
156  {
157  *traceOfInts *= 3;
158  CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[10], 30));
159  *traceOfInts += 10;
160  CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[20], 70));
161  *traceOfInts -= 10;
162  CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[30], 90));
163  *traceOfInts /= 3;
164  CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[40], 40));
165 
166  // assignment =
167  {
168  TraceI copy = *traceOfInts;
169  for (TraceI::SizeType i = copy.GetStart(); i < copy.GetStop(); ++i)
170  CPPUNIT_ASSERT(Verify<Equal>((*traceOfInts)[i], copy[i]));
171  }
172 
173  // unary -
174  {
175  const TraceI negTrace(-(*traceOfInts));
176  for (TraceI::ConstIterator it = negTrace.Begin(), jt = traceOfInts->Begin();
177  it != negTrace.End(); ++it, ++jt)
178  CPPUNIT_ASSERT(Verify<Equal>(*it, -(*jt)));
179  }
180 
181  // operator +
182  {
183  const TraceI twiceTrace(*traceOfInts + (*traceOfInts));
184  for (TraceI::SizeType i = twiceTrace.GetStart(); i < twiceTrace.GetStop(); ++i)
185  CPPUNIT_ASSERT(Verify<Equal>(twiceTrace[i], 2*(*traceOfInts)[i]));
186  }
187  {
188  const TraceI addTrace(*traceOfInts + 13);
189  for (TraceI::ConstIterator it = addTrace.Begin(), jt = traceOfInts->Begin();
190  it != addTrace.End(); ++it, ++jt)
191  CPPUNIT_ASSERT(Verify<Equal>(*it, *jt + 13));
192  }
193  {
194  const TraceI addLeftTrace(10 + (*traceOfInts));
195  for (TraceI::ConstIterator it = addLeftTrace.Begin(), jt = traceOfInts->Begin();
196  it != addLeftTrace.End(); ++it, ++jt)
197  CPPUNIT_ASSERT(Verify<Equal>(*it, 10 + (*jt)));
198  }
199 
200  // operator -
201  {
202  const TraceI zeroTrace(*traceOfInts - (*traceOfInts));
203  for (TraceI::ConstIterator it = zeroTrace.Begin(); it != zeroTrace.End(); ++it)
204  CPPUNIT_ASSERT(Verify<Equal>(*it, 0));
205  }
206  {
207  const TraceI subTrace(*traceOfInts - 13);
208  for (TraceI::ConstIterator it = subTrace.Begin(), jt = traceOfInts->Begin();
209  it != subTrace.End(); ++it, ++jt)
210  CPPUNIT_ASSERT(Verify<Equal>(*it, *jt - 13));
211  }
212  {
213  const TraceI subLeftTrace(10 - (*traceOfInts));
214  for (TraceI::ConstIterator it = subLeftTrace.Begin(), jt = traceOfInts->Begin();
215  it != subLeftTrace.End(); ++it, ++jt)
216  CPPUNIT_ASSERT(Verify<Equal>(*it, 10 - (*jt)));
217  }
218 
219  // operator *
220  {
221  const TraceI sqrTrace(*traceOfInts * (*traceOfInts));
222  for (TraceI::ConstIterator it = sqrTrace.Begin(), jt = traceOfInts->Begin();
223  it != sqrTrace.End(); ++it, ++jt)
224  CPPUNIT_ASSERT(Verify<Equal>(*it, (*jt)*(*jt)));
225  }
226  {
227  const TraceI mulTrace(*traceOfInts * 3);
228  for (TraceI::ConstIterator it = mulTrace.Begin(), jt = traceOfInts->Begin();
229  it != mulTrace.End(); ++it, ++jt)
230  CPPUNIT_ASSERT(Verify<Equal>(*it, *jt * 3));
231  }
232  {
233  const TraceI mulLeftTrace(2 * (*traceOfInts));
234  for (TraceI::ConstIterator it = mulLeftTrace.Begin(), jt = traceOfInts->Begin();
235  it != mulLeftTrace.End(); ++it, ++jt)
236  CPPUNIT_ASSERT(Verify<Equal>(*it, 2 * (*jt)));
237  }
238 
239  // operator /
240  {
241  const TraceI divTrace(*traceOfInts / 5);
242  for (TraceI::ConstIterator it = divTrace.Begin(), jt = traceOfInts->Begin();
243  it != divTrace.End(); ++it, ++jt)
244  CPPUNIT_ASSERT(Verify<Equal>(*it, *jt / 5));
245  }
246 
247  // promotion
248  {
249  const TraceD pTrace(*traceOfInts / 2.);
250  TraceI::ConstIterator jt = traceOfInts->Begin();
251  for (TraceD::ConstIterator it = pTrace.Begin(); it != pTrace.End(); ++it, ++jt)
252  CPPUNIT_ASSERT(Verify<Equal>(*it, *jt / 2.));
253  }
254 
255  }
256 
257  void
259  {
260  // min
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));
264  // max
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));
268  // median
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.));
277  // sum
278  CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Sum(*traceOfDoubles, 0, 2), 15.0));
279  // mean
280  CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Mean(*traceOfDoubles, 0, 2), 5.0));
281  // RMS
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));
285  // Centroid
286  CPPUNIT_ASSERT(Verify<CloseTo>(TraceAlgorithm::Centroid(*traceForCentroid, 0, 2), 1.5));
287  }
288 
289  void
291  {
292  // bins in wrong order
293  TraceAlgorithm::Mean(*traceOfDoubles, 2, 0);
294  }
295 
296  void
298  {
299  // last bin too big
300  TraceAlgorithm::Mean(*traceOfDoubles, 0, 999);
301  }
302 
303  void
305  {
306  MultiTraceI mtrace;
307  mtrace.AddTrace(3, 10, 0);
308  mtrace.GetTrace(0)[0] = 0;
309  mtrace.GetTrace(0)[1] = 1;
310  mtrace.GetTrace(0)[2] = 2;
311 
312  // HasLabel
313  CPPUNIT_ASSERT(Verify<Equal>(mtrace.HasLabel(0), true));
314  CPPUNIT_ASSERT(Verify<Equal>(mtrace.HasLabel(1), false));
315 
316  // Add more traces
317  mtrace.AddTrace(*traceOfInts, 1);
318  mtrace.AddTrace(*traceOfInts, 2);
319  CPPUNIT_ASSERT(Verify<Equal>(mtrace.GetNLabels(), 3U));
320 
321  // multitrace accessor
322  TraceI& traceSource = mtrace.GetTrace(1);
323  CPPUNIT_ASSERT(Verify<Equal>(traceSource[3], 3));
324 
325  // multitrace iterator
326  {
327  int i = 0;
328  for (MultiTraceI::Iterator it = mtrace.Begin();
329  it != mtrace.End(); ++it, ++i)
330  CPPUNIT_ASSERT(Verify<Equal>(it->GetLabel(), i));
331  }
332 
333  // copy ctor
334  {
335  int i = 0;
336  const MultiTraceI mcopy = mtrace;
337  for (MultiTraceI:: ConstIterator it = mcopy.Begin();
338  it != mcopy.End(); ++it, ++i) {
339 
340  CPPUNIT_ASSERT(Verify<Equal>(it->GetLabel(), i));
341 
342  const TraceI ta = it->GetTrace();
343  for (int j = 0; j < 3; ++j)
344  CPPUNIT_ASSERT(Verify<Equal>(ta[j], j));
345  }
346  }
347  // postincrement
348  // TO ADD
349  }
350 
351  void
353  {
354  TraceI t(10, 10, 10);
355 
356  for (TraceI::ConstIterator it = t.Begin();
357  it != t.End(); ++it)
358  CPPUNIT_ASSERT(Verify<Equal>(*it, 10));
359  }
360 
361 };
362 
364 
365 // Configure (x)emacs for this file ...
366 // Local Variables:
367 // mode: c++
368 // End:
void testBinException2()
Definition: testTraces.cc:297
boost::transform_iterator< LabeledObjectFunctor, typename MultiObjectContainer::iterator, LabeledObjectType > Iterator
Definition: MultiObject.h:78
void Adopt(const T2 *const cArray, const SizeType size)
Definition: Trace.h:91
void AddTrace(const int size, const double binSize, const int label)
Definition: MultiTrace.h:76
SizeType GetStop() const
Get valid data stop bin.
Definition: Trace.h:148
TraceD * traceForCentroid
Definition: testTraces.cc:46
void testBinException1()
Definition: testTraces.cc:290
Trace< int > TraceI
Definition: Trace-fwd.h:24
TraceI * traceForMedian2
Definition: testTraces.cc:49
TraceI * traceOneElement
Definition: testTraces.cc:47
void setUp()
Definition: testTraces.cc:54
Iterator Begin()
Definition: MultiObject.h:83
boost::transform_iterator< LabeledObjectFunctor, typename MultiObjectContainer::const_iterator, LabeledObjectType > ConstIterator
Definition: MultiObject.h:81
void testOperators()
Definition: testTraces.cc:155
TraceI * traceOfInts
Definition: testTraces.cc:44
CPPUNIT_TEST_SUITE_REGISTRATION(testAiresShowerFile)
#define U
void tearDown()
Definition: testTraces.cc:106
std::vector< int >::const_iterator ConstIterator
Definition: Trace.h:60
Trace< double > TraceD
Definition: Trace-fwd.h:26
void testMultiTrace()
Definition: testTraces.cc:304
TraceD * traceForMedian
Definition: testTraces.cc:48
Iterator Begin()
Definition: Trace.h:75
void testAlgorithms()
Definition: testTraces.cc:258
std::vector< int >::size_type SizeType
Definition: Trace.h:58
TraceD * traceOfDoubles
Definition: testTraces.cc:45
void testEqualAndCopyCtor()
Definition: testTraces.cc:118
SizeType GetSize() const
Definition: Trace.h:156
void testCtor()
Definition: testTraces.cc:352
void testFillTrace()
Definition: testTraces.cc:128
SizeType GetStart() const
Get valid data start bin.
Definition: Trace.h:142
Trace< T > & GetTrace(const int label=0)
Returns the trace for /par source.
Definition: MultiTrace.h:70
Exception thrown when trying to access invalid bounds in Trace.
Iterator End()
Definition: MultiObject.h:85
TraceI * traceForMedian3
Definition: testTraces.cc:50
unsigned int GetNLabels() const
Definition: MultiObject.h:89
double Mean(const std::vector< double > &v)
Definition: Functions.h:31
Iterator End()
Definition: Trace.h:76
std::vector< double >::iterator Iterator
Definition: Trace.h:59
bool HasLabel(const int label) const
Definition: MultiObject.h:91

, generated on Tue Sep 26 2023.