fileIndex_t.cppunit.cc
Go to the documentation of this file.
1 /*
2  * fileIndex_t.cppunit.cc
3  */
4 
5 #include <cppunit/extensions/HelperMacros.h>
6 
8 
9 class testFileIndex : public CppUnit::TestFixture {
16 
17 public:
18  void
20  {}
21  void
23  {}
24 
29 
31 };
32 
33 /// registration of the test so that the runner can find it
35 
36 void
38 {
39  art::FileIndex fileIndex;
40  CPPUNIT_ASSERT(fileIndex.empty());
41  CPPUNIT_ASSERT(fileIndex.size() == 0);
42  CPPUNIT_ASSERT(fileIndex.begin() == fileIndex.end());
43 
44  fileIndex.addEntry(art::EventID(100, 101, 102), 1);
45  fileIndex.addEntry(art::EventID::invalidEvent(art::SubRunID(200, 201)), 2);
46  fileIndex.addEntry(art::EventID(300, 0, 1), 3);
48  fileIndex.addEntry(art::EventID(100, 101, 103), 3);
49 
50  CPPUNIT_ASSERT(!fileIndex.empty());
51  CPPUNIT_ASSERT(fileIndex.size() == 5);
52 
53  art::FileIndex::const_iterator iter = fileIndex.begin();
54  CPPUNIT_ASSERT(iter->eventID_ == art::EventID(100, 101, 102));
55  CPPUNIT_ASSERT(iter->entry_ == 1);
56  CPPUNIT_ASSERT(iter->getEntryType() == art::FileIndex::kEvent);
57 
58  ++iter;
59  CPPUNIT_ASSERT(iter->getEntryType() == art::FileIndex::kSubRun);
60 
61  ++iter;
62  CPPUNIT_ASSERT(iter->getEntryType() == art::FileIndex::kEvent);
63 
64  ++iter;
65  CPPUNIT_ASSERT(iter->eventID_ == art::EventID::invalidEvent(art::RunID(300)));
66  CPPUNIT_ASSERT(iter->entry_ == 3);
67  CPPUNIT_ASSERT(iter->getEntryType() == art::FileIndex::kRun);
68 
69  ++iter;
70  ++iter;
71  CPPUNIT_ASSERT(iter == fileIndex.end());
72 
73  CPPUNIT_ASSERT(fileIndex.allEventsInEntryOrder() == true);
74  CPPUNIT_ASSERT(fileIndex.allEventsInEntryOrder() == true);
75 }
76 
77 void
79 {
80  // Note this contains some illegal duplicates
81  // For the moment there is nothing to prevent
82  // these from occurring so we handle this using
83  // a stable_sort for now ... They will not bother
84  // the FileIndex.
85 
86  art::FileIndex fileIndex;
87  fileIndex.addEntry(art::EventID(3, 3, 2), 5);
88  fileIndex.addEntry(art::EventID(3, 3, 1), 4);
89  fileIndex.addEntry(art::EventID(3, 3, 3), 3);
96  fileIndex.addEntry(art::EventID(3, 3, 1), 1);
97  fileIndex.addEntry(art::EventID(1, 2, 2), 2);
98  fileIndex.addEntry(art::EventID(1, 2, 4), 1);
100  fileIndex.addEntry(art::EventID(1, 2, 1), 2);
103  fileIndex.addEntry(art::EventID::invalidEvent(art::SubRunID(6, 1)), 10);
104  fileIndex.addEntry(art::EventID::invalidEvent(art::SubRunID(6, 3)), 11);
105  fileIndex.addEntry(art::EventID::invalidEvent(art::SubRunID(6, 4)), 12);
106  fileIndex.addEntry(art::EventID::invalidEvent(art::SubRunID(6, 5)), 13);
107  fileIndex.addEntry(art::EventID::invalidEvent(art::SubRunID(6, 8)), 14);
108  fileIndex.addEntry(art::EventID::invalidEvent(art::SubRunID(6, 9)), 15);
109  fileIndex.addEntry(art::EventID::invalidEvent(art::SubRunID(9, 1)), 16);
110  fileIndex.addEntry(art::EventID::invalidEvent(art::SubRunID(9, 2)), 17);
112  fileIndex.addEntry(art::EventID(6, 0, 4), 12);
113  fileIndex.addEntry(art::EventID(6, 1, 5), 13);
114  fileIndex.addEntry(art::EventID(6, 1, 6), 14);
115  fileIndex.addEntry(art::EventID(6, 1, 7), 15);
116  fileIndex.addEntry(art::EventID(6, 3, 9), 16);
117  fileIndex.addEntry(art::EventID(6, 5, 13), 17);
118  fileIndex.addEntry(art::EventID(6, 5, 14), 18);
119  fileIndex.addEntry(art::EventID(6, 8, 15), 19);
120  fileIndex.addEntry(art::EventID(6, 9, 5), 20);
121  fileIndex.addEntry(art::EventID(6, 9, 25), 21);
122  fileIndex.addEntry(art::EventID(6, 9, 25), 27);
123  fileIndex.addEntry(art::EventID(9, 1, 5), 22);
124  fileIndex.addEntry(art::EventID(9, 2, 5), 23);
125  fileIndex.sortBy_Run_SubRun_Event();
126 
127  art::FileIndex shouldBe;
130  shouldBe.addEntry(art::EventID(1, 2, 1), 2);
131  shouldBe.addEntry(art::EventID(1, 2, 2), 2);
132  shouldBe.addEntry(art::EventID(1, 2, 4), 1);
138  shouldBe.addEntry(art::EventID(3, 3, 1), 4);
139  shouldBe.addEntry(art::EventID(3, 3, 1), 1);
140  shouldBe.addEntry(art::EventID(3, 3, 2), 5);
141  shouldBe.addEntry(art::EventID(3, 3, 3), 3);
144  shouldBe.addEntry(art::EventID(6, 0, 4), 12);
146  shouldBe.addEntry(art::EventID(6, 1, 5), 13);
147  shouldBe.addEntry(art::EventID(6, 1, 6), 14);
148  shouldBe.addEntry(art::EventID(6, 1, 7), 15);
150  shouldBe.addEntry(art::EventID(6, 3, 9), 16);
153  shouldBe.addEntry(art::EventID(6, 5, 13), 17);
154  shouldBe.addEntry(art::EventID(6, 5, 14), 18);
156  shouldBe.addEntry(art::EventID(6, 8, 15), 19);
158  shouldBe.addEntry(art::EventID(6, 9, 5), 20);
159  shouldBe.addEntry(art::EventID(6, 9, 25), 21);
160  shouldBe.addEntry(art::EventID(6, 9, 25), 27);
163  shouldBe.addEntry(art::EventID(9, 1, 5), 22);
165  shouldBe.addEntry(art::EventID(9, 2, 5), 23);
166 
167  CPPUNIT_ASSERT(areEntryVectorsTheSame(fileIndex, shouldBe));
168 
169  CPPUNIT_ASSERT(fileIndex.allEventsInEntryOrder() == false);
170  CPPUNIT_ASSERT(fileIndex.allEventsInEntryOrder() == false);
171 
173  fileIndex.findPosition(art::EventID(3, 3, 2));
174  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 12);
175  CPPUNIT_ASSERT(iter->eventID_ == art::EventID(3, 3, 2));
176  CPPUNIT_ASSERT(iter->entry_ == 5);
177 
178  iter = fileIndex.findPosition(art::EventID(3, 3, 7));
179  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 14);
180 
181  iter = fileIndex.findPosition(art::EventID(1, 2, 3));
182  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 4);
183 
184  iter =
186  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 8);
187 
188  iter =
190  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 1);
191 
192  iter = fileIndex.findPosition(art::EventID::invalidEvent(art::RunID(1)));
193  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 0);
194 
195  iter = fileIndex.findPosition(art::EventID::invalidEvent(art::RunID(2)));
196  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 5);
197 
198  iter = fileIndex.findPosition(art::EventID(2, 0, 1));
199  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 5);
200 
201  iter = fileIndex.findPosition(art::EventID(1, 2, 3));
202  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 4);
203 
204  iter = fileIndex.findPosition(art::EventID(3, 0, 3));
205  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 7);
206 
207  iter = fileIndex.findPosition(art::EventID(3, 3, 2), true);
208  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 12);
209  CPPUNIT_ASSERT(fileIndex.contains(art::EventID(3, 3, 2), true));
210 
211  iter = fileIndex.findPosition(art::EventID(1, 2, 3), true);
212  CPPUNIT_ASSERT(iter == fileIndex.end());
213  CPPUNIT_ASSERT(!fileIndex.contains(art::EventID(1, 2, 3), true));
214 
215  iter = fileIndex.findPosition(art::EventID(1, 2, 3), false);
216  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 4);
217  CPPUNIT_ASSERT(fileIndex.contains(art::EventID(1, 2, 3), false));
218 
219  iter = fileIndex.findPosition(art::EventID(3, 0, 1), true);
220  CPPUNIT_ASSERT(iter == fileIndex.end());
221 
222  iter = fileIndex.findPosition(art::SubRunID(3, 1), true);
223  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 7);
224 
225  iter = fileIndex.findPosition(art::SubRunID(3, 2), true);
226  CPPUNIT_ASSERT(iter == fileIndex.end());
227 
228  iter = fileIndex.findPosition(art::SubRunID(3, 1), false);
229  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 7);
230 
231  iter = fileIndex.findPosition(art::SubRunID(3, 2), false);
232  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 8);
233 
234  CPPUNIT_ASSERT(fileIndex.contains(art::SubRunID(3, 3), true));
235  CPPUNIT_ASSERT(!fileIndex.contains(art::SubRunID(2, 3), true));
236 
237  iter = fileIndex.findPosition(art::RunID(3), true);
238  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 5);
239 
240  iter = fileIndex.findPosition(art::RunID(2), true);
241  CPPUNIT_ASSERT(iter == fileIndex.end());
242 
243  iter = fileIndex.findPosition(art::RunID(2), false);
244  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 5);
245 
246  CPPUNIT_ASSERT(fileIndex.contains(art::RunID(3), true));
247  CPPUNIT_ASSERT(!fileIndex.contains(art::RunID(2), true));
248 
249  iter = fileIndex.findSubRunOrRunPosition(art::SubRunID(1, 2));
250  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 1);
251 
252  iter = fileIndex.findSubRunOrRunPosition(
254  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 5);
255 
256  iter = fileIndex.findSubRunOrRunPosition(art::SubRunID(3, 4));
257  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 14);
258 
259  iter = fileIndex.findSubRunOrRunPosition(art::SubRunID(3, 2));
260  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 8);
261 
262  iter = fileIndex.findSubRunOrRunPosition(art::SubRunID(2, 1));
263  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 5);
264 
265  // Search for event without using subrun number.
266  iter = fileIndex.findPosition(
268  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 4);
269 
270  iter = fileIndex.findPosition(
272  CPPUNIT_ASSERT(iter == fileIndex.end());
273 
274  iter = fileIndex.findPosition(
276  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 10);
277 
278  iter = fileIndex.findPosition(
280  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 16);
281 
282  iter = fileIndex.findPosition(
284  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 22);
285 
286  iter = fileIndex.findPosition(
288  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 31);
289 }
290 
291 void
293 {
294 
295  // Note this contains some illegal duplicates
296  // For the moment there is nothing to prevent
297  // these from occurring so we handle this using
298  // a stable_sort for now ... They will not bother
299  // the FileIndex.
300 
301  art::FileIndex fileIndex;
302  fileIndex.addEntry(art::EventID(3, 3, 2), 5);
303  fileIndex.addEntry(art::EventID(3, 3, 1), 4);
304  fileIndex.addEntry(art::EventID(3, 3, 3), 3);
311  fileIndex.addEntry(art::EventID(3, 3, 1), 1);
312  fileIndex.addEntry(art::EventID(1, 2, 2), 2);
313  fileIndex.addEntry(art::EventID(1, 2, 4), 1);
315  fileIndex.addEntry(art::EventID(1, 2, 1), 2);
316 
317  fileIndex.sortBy_Run_SubRun_EventEntry();
318 
319  art::FileIndex shouldBe;
322  shouldBe.addEntry(art::EventID(1, 2, 4), 1);
323  shouldBe.addEntry(art::EventID(1, 2, 2), 2);
324  shouldBe.addEntry(art::EventID(1, 2, 1), 2);
330  shouldBe.addEntry(art::EventID(3, 3, 1), 1);
331  shouldBe.addEntry(art::EventID(3, 3, 3), 3);
332  shouldBe.addEntry(art::EventID(3, 3, 1), 4);
333  shouldBe.addEntry(art::EventID(3, 3, 2), 5);
334 
335  CPPUNIT_ASSERT(areEntryVectorsTheSame(fileIndex, shouldBe));
336 
338  fileIndex.findPosition(art::SubRunID(3, 1), true);
339  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 7);
340 
341  iter = fileIndex.findPosition(art::SubRunID(3, 2), true);
342  CPPUNIT_ASSERT(iter == fileIndex.end());
343 
344  iter = fileIndex.findPosition(art::SubRunID(3, 1), false);
345  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 7);
346 
347  iter = fileIndex.findPosition(art::SubRunID(3, 2), false);
348  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 8);
349 
350  iter = fileIndex.findPosition(art::RunID(3), true);
351  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 5);
352 
353  iter = fileIndex.findPosition(art::RunID(2), true);
354  CPPUNIT_ASSERT(iter == fileIndex.end());
355 
356  iter = fileIndex.findPosition(art::RunID(2), false);
357  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 5);
358 
359  iter = fileIndex.findSubRunOrRunPosition(art::SubRunID(1, 2));
360  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 1);
361 
362  iter = fileIndex.findSubRunOrRunPosition(
364  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 5);
365 
366  iter = fileIndex.findSubRunOrRunPosition(art::SubRunID(3, 4));
367  CPPUNIT_ASSERT(iter == fileIndex.end());
368 
369  iter = fileIndex.findSubRunOrRunPosition(art::SubRunID(3, 2));
370  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 8);
371 
372  iter = fileIndex.findSubRunOrRunPosition(art::SubRunID(2, 1));
373  CPPUNIT_ASSERT((iter - fileIndex.begin()) == 5);
374 }
375 
376 void
378 {
379 
380  // Test the different cases
381 
382  // Nothing in the FileIndex
383  art::FileIndex fileIndex;
384  CPPUNIT_ASSERT(fileIndex.eventsUniqueAndOrdered());
385 
386  // No events
387  art::FileIndex fileIndex1;
389  fileIndex1.addEntry(art::EventID::invalidEvent(art::SubRunID(1, 1)), 1);
390  CPPUNIT_ASSERT(fileIndex1.eventsUniqueAndOrdered());
391 
392  // One event and nothing after it
393  art::FileIndex fileIndex2;
395  fileIndex2.addEntry(art::EventID::invalidEvent(art::SubRunID(1, 2)), 1);
396  fileIndex2.addEntry(art::EventID(1, 2, 1), 1);
397  CPPUNIT_ASSERT(fileIndex2.eventsUniqueAndOrdered());
398 
399  // One event with a run after it
400  art::FileIndex fileIndex3;
402  fileIndex3.addEntry(art::EventID::invalidEvent(art::SubRunID(1, 2)), 1);
403  fileIndex3.addEntry(art::EventID(1, 2, 1), 1);
404  fileIndex3.addEntry(art::EventID::invalidEvent(art::RunID(2)), 2);
405  CPPUNIT_ASSERT(fileIndex3.eventsUniqueAndOrdered());
406 
407  // Two events
408  art::FileIndex fileIndex4;
410  fileIndex4.addEntry(art::EventID::invalidEvent(art::SubRunID(1, 1)), 1);
411  fileIndex4.addEntry(art::EventID(1, 1, 1), 1);
412  fileIndex4.addEntry(art::EventID::invalidEvent(art::RunID(2)), 2);
413  fileIndex4.addEntry(art::EventID::invalidEvent(art::SubRunID(2, 1)), 2);
414  fileIndex4.addEntry(art::EventID(2, 1, 1), 2);
415  CPPUNIT_ASSERT(fileIndex4.eventsUniqueAndOrdered());
416 
417  // Two events, same run and event number
418  art::FileIndex fileIndex5;
420  fileIndex5.addEntry(art::EventID::invalidEvent(art::SubRunID(1, 1)), 1);
421  fileIndex5.addEntry(art::EventID(1, 1, 1), 1);
422  fileIndex5.addEntry(art::EventID::invalidEvent(art::RunID(1)), 2);
423  fileIndex5.addEntry(art::EventID::invalidEvent(art::SubRunID(1, 2)), 2);
424  fileIndex5.addEntry(art::EventID(1, 2, 1), 2);
425  CPPUNIT_ASSERT(fileIndex5.eventsUniqueAndOrdered());
426 
427  // Not ordered by run
428  art::FileIndex fileIndex6;
430  fileIndex6.addEntry(art::EventID::invalidEvent(art::SubRunID(1, 2)), 1);
431  fileIndex6.addEntry(art::EventID(1, 2, 1), 1);
432  fileIndex6.addEntry(art::EventID::invalidEvent(art::RunID(2)), 2);
433  fileIndex6.addEntry(art::EventID::invalidEvent(art::SubRunID(2, 1)), 2);
434  fileIndex6.addEntry(art::EventID(2, 1, 1), 2);
435  fileIndex6.addEntry(art::EventID::invalidEvent(art::RunID(1)), 3);
436  fileIndex6.addEntry(art::EventID::invalidEvent(art::SubRunID(1, 3)), 3);
437  fileIndex6.addEntry(art::EventID(1, 3, 1), 3);
438  CPPUNIT_ASSERT(!fileIndex6.eventsUniqueAndOrdered());
439 
440  // Not ordered by event
441  art::FileIndex fileIndex7;
443  fileIndex7.addEntry(art::EventID::invalidEvent(art::SubRunID(1, 2)), 1);
444  fileIndex7.addEntry(art::EventID(1, 2, 1), 1);
445  fileIndex7.addEntry(art::EventID::invalidEvent(art::RunID(2)), 2);
446  fileIndex7.addEntry(art::EventID::invalidEvent(art::SubRunID(2, 1)), 2);
447  fileIndex7.addEntry(art::EventID(2, 1, 2), 2);
448  fileIndex7.addEntry(art::EventID::invalidEvent(art::SubRunID(2, 3)), 3);
449  fileIndex7.addEntry(art::EventID(2, 3, 1), 3);
450  CPPUNIT_ASSERT(fileIndex7.eventsUniqueAndOrdered());
451 
452  // OK, ordered by event and unique
453  art::FileIndex fileIndex8;
455  fileIndex8.addEntry(art::EventID::invalidEvent(art::SubRunID(1, 1)), 1);
456  fileIndex8.addEntry(art::EventID(1, 1, 1), 1);
457  fileIndex8.addEntry(art::EventID(1, 1, 2), 1);
458  fileIndex8.addEntry(art::EventID(1, 1, 3), 1);
459  fileIndex8.addEntry(art::EventID(1, 1, 4), 1);
460  fileIndex8.addEntry(art::EventID::invalidEvent(art::RunID(2)), 2);
461  fileIndex8.addEntry(art::EventID::invalidEvent(art::SubRunID(2, 1)), 2);
462  fileIndex8.addEntry(art::EventID(2, 1, 1), 2);
463  fileIndex8.addEntry(art::EventID::invalidEvent(art::SubRunID(2, 3)), 3);
464  fileIndex8.addEntry(art::EventID(2, 3, 2), 3);
465  fileIndex8.addEntry(art::EventID(2, 3, 3), 3);
466  fileIndex8.addEntry(art::EventID(2, 3, 4), 3);
467  fileIndex8.addEntry(art::EventID(2, 3, 5), 3);
468  fileIndex8.addEntry(art::EventID(2, 3, 6), 3);
469  CPPUNIT_ASSERT(fileIndex8.eventsUniqueAndOrdered());
470 }
471 
472 bool
474 {
475  if (i1.size() != i2.size())
476  return false;
477  for (art::FileIndex::const_iterator iter1 = i1.begin(), iter2 = i2.begin();
478  iter1 != i1.end();
479  ++iter1, ++iter2) {
480  if (*iter1 != *iter2)
481  return false;
482  }
483  return true;
484 }
CPPUNIT_TEST_SUITE(testFileIndex)
iterator begin()
Definition: FileIndex.cc:50
const_iterator findSubRunOrRunPosition(SubRunID const &srID) const
Definition: FileIndex.cc:306
bool allEventsInEntryOrder() const
Definition: FileIndex.cc:165
void eventEntrySortAndSearchTest()
void sortBy_Run_SubRun_EventEntry()
Definition: FileIndex.cc:157
bool empty() const
Definition: FileIndex.cc:92
std::vector< Element >::size_type size() const
Definition: FileIndex.cc:86
bool areEntryVectorsTheSame(art::FileIndex &i1, art::FileIndex &i2)
void sortBy_Run_SubRun_Event()
Definition: FileIndex.cc:149
void eventsUniqueAndOrderedTest()
const_iterator findPosition(EventID const &eID) const
Definition: FileIndex.cc:227
void addEntry(EventID const &eID, EntryNumber_t entry)
Definition: FileIndex.cc:134
bool eventsUniqueAndOrdered() const
Definition: FileIndex.cc:186
iterator end()
Definition: FileIndex.cc:68
CPPUNIT_TEST(constructAndInsertTest)
std::vector< Element >::const_iterator const_iterator
Definition: FileIndex.h:75
bool contains(EventID const &id, bool exact) const
Definition: FileIndex.cc:116
static constexpr EventID invalidEvent() noexcept
Definition: EventID.h:202
static SubRunID invalidSubRun(RunID const &rID)
Definition: SubRunID.h:163
CPPUNIT_TEST_SUITE_REGISTRATION(testFileIndex)
registration of the test so that the runner can find it