1 #include <framework/dataobjects/EventMetaData.h>
2 #include <framework/dataobjects/ProfileInfo.h>
3 #include <framework/datastore/StoreArray.h>
4 #include <framework/datastore/StoreObjPtr.h>
5 #include <framework/datastore/RelationsObject.h>
6 #include <framework/utilities/TestHelpers.h>
8 #include <gtest/gtest.h>
17 class DataStoreTest :
public ::testing::Test {
29 DataStore::Instance().setInitializeActive(
true);
30 evtPtr.registerInDataStore();
31 evtData.registerInDataStore();
32 evtDataDifferentName.registerInDataStore();
33 evtDataEmpty.registerInDataStore();
34 evtDataDifferentDurability.registerInDataStore();
35 profileInfo.registerInDataStore();
36 DataStore::Instance().setInitializeActive(
false);
43 for (
int i = 0; i < 10; ++i) {
51 evtDataDifferentName.appendNew(newObj2);
54 newobj = evtDataDifferentDurability.appendNew(30 + i);
55 ASSERT_TRUE(newobj !=
nullptr);
63 void TearDown()
override
65 DataStore::Instance().reset();
69 static void verifyContents()
73 EXPECT_EQ(evtPtr->getEvent(), (
unsigned long)42);
80 EXPECT_EQ(evtDataDifferentName.getEntries(), 10);
81 EXPECT_EQ(evtDataDifferentDurability.getEntries(), 10);
83 for (
int i = 0; i < 10; ++i) {
84 EXPECT_EQ((
int)evtData[i]->getEvent(), 10 + i);
85 EXPECT_EQ((
int)evtDataDifferentName[i]->getEvent(), 20 + i);
86 EXPECT_EQ((
int)evtDataDifferentDurability[i]->getEvent(), 30 + i);
88 EXPECT_EQ(profileInfo[i]->getVirtualMemory(), 128u);
89 EXPECT_FLOAT_EQ(profileInfo[i]->getTimeInSec(), 60.0);
95 TEST_F(DataStoreTest, EntryNames)
97 EXPECT_EQ(
"JustSomeStuff", DataStore::defaultObjectName(
"JustSomeStuff"));
98 EXPECT_EQ(
"JustSomeStuff", DataStore::defaultObjectName(
"Belle2::Foo::JustSomeStuff"));
99 EXPECT_EQ(
"JustSomeStuffs", DataStore::defaultArrayName(
"Belle2::Foo::JustSomeStuff"));
101 EXPECT_EQ(
"MyOwnName", DataStore::arrayName<TObject>(
"MyOwnName"));
102 EXPECT_EQ(
"MyOwnName", DataStore::arrayName(TObject::Class(),
"MyOwnName"));
103 EXPECT_EQ(
"TObjects", DataStore::arrayName<TObject>(
""));
104 EXPECT_EQ(
"TObjects", DataStore::arrayName(TObject::Class(),
""));
106 EXPECT_EQ(
"MyOwnName", DataStore::objectName<TObject>(
"MyOwnName"));
107 EXPECT_EQ(
"MyOwnName", DataStore::objectName(TObject::Class(),
"MyOwnName"));
109 EXPECT_EQ(
"TObject", DataStore::objectName<TObject>(
""));
110 EXPECT_EQ(
"TObject", DataStore::objectName(TObject::Class(),
""));
112 EXPECT_EQ(
"EventMetaDatas", DataStore::arrayName<EventMetaData>(
""));
113 EXPECT_EQ(
"GF2Track", DataStore::defaultObjectName(
"genfit::Track"));
115 EXPECT_EQ(
"AToB", DataStore::relationName(
"A",
"B"));
116 auto relname = DataStore::defaultRelationName<EventMetaData, ProfileInfo>();
117 EXPECT_EQ(
"EventMetaDatasToProfileInfos", relname);
120 TEST_F(DataStoreTest, GetTClass)
122 EXPECT_EQ(Belle2::EventMetaData::Class(), DataStore::getTClassFromDefaultObjectName(
"Belle2::EventMetaData"));
123 EXPECT_EQ(Belle2::EventMetaData::Class(), DataStore::getTClassFromDefaultObjectName(
"EventMetaData"));
125 EXPECT_EQ(Belle2::EventMetaData::Class(), DataStore::getTClassFromDefaultArrayName(
"Belle2::EventMetaDatas"));
126 EXPECT_EQ(Belle2::EventMetaData::Class(), DataStore::getTClassFromDefaultArrayName(
"EventMetaDatas"));
131 TEST_F(DataStoreTest, AttachTest)
137 EXPECT_TRUE(evtData);
139 EXPECT_TRUE(evtDataDifferentName);
141 EXPECT_TRUE(evtDataDifferentDurability);
143 EXPECT_TRUE(profileInfo);
147 TEST_F(DataStoreTest, TypeTest)
162 EXPECT_TRUE(emd.isValid());
163 EXPECT_EQ(std::string(
"Belle2::EventMetaData"), std::string(emd->GetName()));
167 TEST_F(DataStoreTest, MetaDataTest)
170 EXPECT_EQ(evtPtr.getDurability(), DataStore::c_Event);
171 EXPECT_TRUE(evtPtr.getName() ==
"EventMetaData");
172 EXPECT_FALSE(evtPtr.isArray());
173 EXPECT_TRUE(evtPtr.getClass() == EventMetaData::Class());
179 EXPECT_TRUE(evtData.getName() ==
"EventMetaDatas");
180 EXPECT_TRUE(evtData.isArray());
181 EXPECT_TRUE(evtData.getClass() == EventMetaData::Class());
182 EXPECT_EQ(evtData.getDurability(), DataStore::c_Event);
183 EXPECT_TRUE(evtData == evtData2);
184 EXPECT_FALSE(evtData != evtData2);
185 EXPECT_FALSE(evtData == evtDataDifferentName);
186 EXPECT_FALSE(evtData == evtDataDifferentDurability);
190 EXPECT_FALSE(profileInfo == evtData);
191 EXPECT_TRUE(profileInfo != evtData);
197 TEST_F(DataStoreTest, ReadOnlyAttach)
201 EXPECT_EQ(a->getEvent(), (
unsigned long)42);
215 TEST_F(DataStoreTest, VerifyContents)
222 EXPECT_TRUE(evtData.
isValid());
228 EXPECT_EQ(evtPtr->getEvent(), 1);
230 TEST_F(DataStoreTest, InvalidAccessor)
233 EXPECT_FALSE(none.isValid());
234 EXPECT_THROW(none.getPtr(), std::runtime_error);
235 EXPECT_THROW(none.appendNew(), std::runtime_error);
237 EXPECT_THROW(none.getPtr(), std::runtime_error);
238 EXPECT_EQ(0, none.getEntries());
241 EXPECT_FALSE(noobj.isValid());
242 EXPECT_THROW(*noobj, std::runtime_error);
243 EXPECT_THROW(noobj->getEvent(), std::runtime_error);
246 TEST_F(DataStoreTest, RawAccess)
249 EXPECT_TRUE(evtData.
getPtr() !=
nullptr);
253 TEST_F(DataStoreTest, ArrayConsistency)
259 EXPECT_EQ((
int)evtData.
getPtr()->GetEntries(), 10);
260 EXPECT_EQ((
int)evtDataDifferentName.getPtr()->GetEntries(), 10);
261 EXPECT_EQ((
int)evtDataDifferentDurability.getPtr()->GetEntries(), 10);
262 EXPECT_EQ((
int)profileInfo.
getPtr()->GetEntries(), 10);
266 TEST_F(DataStoreTest, RangeCheck)
269 EXPECT_TRUE(evtData[0] !=
nullptr);
270 EXPECT_THROW(evtData[-1], std::out_of_range);
271 EXPECT_THROW(evtData[10], std::out_of_range);
275 TEST_F(DataStoreTest, ClearMaps)
278 EXPECT_EQ(evtPtr->getEvent(), (
unsigned long)42);
281 DataStore::Instance().invalidateData(DataStore::c_Event);
294 EXPECT_TRUE(*a == *b);
299 EXPECT_EQ(a->getEvent(), (
unsigned long)42);
302 EXPECT_NE(a->getEvent(), (
unsigned long)42);
310 EXPECT_EQ(evtDataDifferentName.getEntries(), 0);
315 EXPECT_EQ(evtDataDifferentDurability.getEntries(), 10);
319 TEST_F(DataStoreTest, RequireObjects)
321 DataStore::Instance().setInitializeActive(
true);
337 DataStore::Instance().setInitializeActive(
false);
343 TEST_F(DataStoreTest, StoreArrayIteration)
348 for (
int i = 0; i < evtData.
getEntries(); i++) {
349 EXPECT_TRUE(evtData[i] !=
nullptr);
360 EXPECT_TRUE(it == it2);
361 EXPECT_FALSE(it != it2);
364 EXPECT_TRUE((it++) == it2);
368 EXPECT_TRUE(it != (++it2));
380 EXPECT_TRUE(ev == *it2);
381 EXPECT_TRUE(it2 != it);
382 EXPECT_TRUE(ev != *it);
388 EXPECT_TRUE(ev == *it3);
394 EXPECT_EQ((
int)evtDataNonConst[0]->getEvent(), 10);
395 EXPECT_EQ((
int)evtDataDifferentName[0]->getEvent(), 20);
397 std::swap_ranges(evtDataNonConst.
begin(), evtDataNonConst.
end(), evtDataDifferentName.begin());
398 EXPECT_EQ((
int)evtDataDifferentName[9]->getEvent(), 19);
399 EXPECT_EQ((
int)evtDataNonConst[9]->getEvent(), 29);
402 std::swap_ranges(evtDataDifferentName.begin(), evtDataDifferentName.end(), evtDataNonConst.
begin());
403 EXPECT_EQ((
int)evtDataNonConst[9]->getEvent(), 19);
404 EXPECT_EQ((
int)evtDataDifferentName[9]->getEvent(), 29);
409 EXPECT_TRUE(&(*it) == evtData[i]);
410 EXPECT_EQ((
int)it->getEvent(), 10 + i);
418 EXPECT_TRUE(&emd == evtData[i]);
426 EXPECT_TRUE(&emd == evtData[i]);
429 EXPECT_EQ(i, evtData.getEntries());
450 TEST_F(DataStoreTest, DataStoreRegistration)
453 DataStore::Instance().setInitializeActive(
true);
459 EXPECT_FALSE(evtPtr.isOptional());
460 EXPECT_FALSE(evtArray.isOptional());
461 EXPECT_FALSE(evtPtr.isRequired());
462 EXPECT_FALSE(evtArray.isRequired());
463 EXPECT_FALSE(evtPtr.
isValid());
464 EXPECT_FALSE(evtArray.isValid());
468 EXPECT_TRUE(evtPtr.registerInDataStore());
469 EXPECT_TRUE(evtArray.registerInDataStore(DataStore::c_DontWriteOut));
472 EXPECT_TRUE(evtPtr.registerInDataStore());
473 EXPECT_TRUE(evtArray.registerInDataStore(DataStore::c_DontWriteOut));
476 EXPECT_B2ERROR(EXPECT_FALSE(evtPtr.registerInDataStore(DataStore::c_ErrorIfAlreadyRegistered)));
477 EXPECT_B2ERROR(EXPECT_FALSE(evtArray.registerInDataStore(DataStore::c_DontWriteOut | DataStore::c_ErrorIfAlreadyRegistered)));
480 EXPECT_TRUE(evtPtr.isOptional());
481 EXPECT_TRUE(evtArray.isOptional());
482 EXPECT_TRUE(evtPtr.isRequired());
483 EXPECT_TRUE(evtArray.isRequired());
484 EXPECT_FALSE(evtPtr.
isValid());
485 EXPECT_TRUE(evtArray.isValid());
488 DataStore::Instance().setInitializeActive(
false);
491 TEST_F(DataStoreTest, RegistrationOutsideOfInitializeShouldFail)
500 EXPECT_FALSE(someothernewname.isValid());
503 TEST_F(DataStoreTest, ConstructedBeforeInitializeButWithNonDefaultName)
511 DataStore::Instance().setInitializeActive(
true);
513 EXPECT_TRUE(events.registerInDataStore(
"ThisBeInterestingNameForEvents"));
514 EXPECT_TRUE(profile.registerInDataStore(
"MyProfileInfoName", DataStore::c_DontWriteOut));
517 EXPECT_TRUE(eventsMetaDatas2.isOptional(
"EventMetaDatas_2"));
518 EXPECT_TRUE(eventsMetaDatas2.isRequired(
"EventMetaDatas_2"));
520 DataStore::Instance().setInitializeActive(
false);
523 EXPECT_EQ(
"ThisBeInterestingNameForEvents", events.getName());
524 EXPECT_TRUE(profile.getName() ==
"MyProfileInfoName");
525 EXPECT_TRUE(profile.notWrittenOut());
526 EXPECT_TRUE(eventsMetaDatas2.getName() ==
"EventMetaDatas_2");
529 EXPECT_EQ(0, events.getEntries());
530 EXPECT_FALSE(profile.isValid());
535 EXPECT_TRUE(profile.isValid());
537 EXPECT_TRUE(profileAttachAgain.isValid());
540 EXPECT_EQ(1, events.getEntries());
542 EXPECT_EQ(1, eventsAttachAgain.getEntries());
545 TEST_F(DataStoreTest, ArrayList)
548 std::vector<std::string> exparrayList = {
"Empty",
"EventMetaDatas",
"EventMetaDatas_2"};
549 EXPECT_EQ(exparrayList, arrayList);
552 TEST_F(DataStoreTest, ReplaceData)
558 DataStore::Instance().setInitializeActive(
true);
559 evtPtrB.registerInDataStore(DataStore::c_DontWriteOut);
560 evtDataB.registerInDataStore(DataStore::c_DontWriteOut);
561 DataStore::Instance().setInitializeActive(
false);
565 EXPECT_EQ(42, evtPtr->getEvent());
566 EXPECT_FALSE(evtPtrB.isValid());
567 EXPECT_FALSE(evtPtr.notWrittenOut());
568 EXPECT_TRUE(evtPtrB.notWrittenOut());
570 DataStore::Instance().replaceData(evtPtr, evtPtrB);
571 EXPECT_EQ(42, evtPtrB->getEvent());
572 EXPECT_FALSE(evtPtr.
isValid());
575 EXPECT_FALSE(evtPtr.notWrittenOut());
576 EXPECT_TRUE(evtPtrB.notWrittenOut());
579 DataStore::Instance().replaceData(evtPtr, evtPtrB);
580 EXPECT_FALSE(evtPtr.
isValid());
581 EXPECT_FALSE(evtPtrB.isValid());
584 DataStore::Instance().replaceData(evtPtr, evtPtrB);
585 EXPECT_FALSE(evtPtr.
isValid());
586 EXPECT_FALSE(evtPtrB.isValid());
592 EXPECT_EQ(0, evtDataB.getEntries());
594 DataStore::Instance().replaceData(evtData, evtDataB);
596 EXPECT_EQ(10, evtDataB.getEntries());
598 DataStore::Instance().replaceData(evtData, evtDataB);
600 EXPECT_EQ(0, evtDataB.getEntries());
602 DataStore::Instance().replaceData(evtData, evtDataB);
604 EXPECT_EQ(0, evtDataB.getEntries());
608 TEST_F(DataStoreTest, SwitchDataStore)
610 EXPECT_TRUE(
"" == DataStore::Instance().currentID());
612 EXPECT_THROW(DataStore::Instance().copyContentsTo(
"foo"), std::out_of_range);
615 DataStore::Instance().createNewDataStoreID(
"foo");
616 EXPECT_TRUE(
"" == DataStore::Instance().currentID());
617 DataStore::Instance().copyContentsTo(
"foo");
618 EXPECT_TRUE(
"" == DataStore::Instance().currentID());
620 DataStore::Instance().switchID(
"foo");
621 EXPECT_TRUE(
"foo" == DataStore::Instance().currentID());
626 a->setEvent(1234567);
629 DataStore::Instance().switchID(
"");
630 EXPECT_TRUE(
"" == DataStore::Instance().currentID());
636 DataStore::Instance().setInitializeActive(
true);
637 evtDataB.registerInDataStore();
638 DataStore::Instance().copyContentsTo(
"foo");
641 TEST_F(DataStoreTest, FindStoreEntry)
650 EXPECT_TRUE(DataStore::Instance().findStoreEntry(evtData[5], entry, index));
652 EXPECT_EQ(entry->
name, evtData.getName());
655 EXPECT_TRUE(DataStore::Instance().findStoreEntry(evtData[5], entry, index));
657 EXPECT_EQ(entry->
name, evtData.getName());
660 EXPECT_TRUE(DataStore::Instance().findStoreEntry(evtDataDifferentName[7], entry, index));
662 EXPECT_EQ(entry->
name, evtDataDifferentName.getName());
664 entry =
nullptr; index = -1;
665 EXPECT_TRUE(DataStore::Instance().findStoreEntry(evtDataDifferentName[7], entry, index));
667 EXPECT_EQ(entry->
name, evtDataDifferentName.getName());
669 entry =
nullptr; index = -1;
671 EXPECT_FALSE(DataStore::Instance().findStoreEntry(&localObj, entry, index));
672 EXPECT_EQ(index, -1);
673 EXPECT_EQ(entry,
nullptr);
679 DataStore::Instance().setInitializeActive(
true);
680 relObjs.registerInDataStore();
681 relObjs2.registerInDataStore();
682 DataStore::Instance().setInitializeActive(
false);
683 for (
int i = 0; i < 6; i++) {
685 relObjs2.appendNew();
688 entry =
nullptr; index = -1;
689 EXPECT_TRUE(DataStore::Instance().findStoreEntry(relObjs[5], entry, index));
691 EXPECT_EQ(entry->
name, relObjs.getName());
694 entry =
nullptr; index = -1;
695 EXPECT_TRUE(DataStore::Instance().findStoreEntry(relObjs[5], entry, index));
697 EXPECT_EQ(entry->
name, relObjs.getName());
699 entry =
nullptr; index = -1;
700 EXPECT_TRUE(DataStore::Instance().findStoreEntry(relObjs2[2], entry, index));
702 EXPECT_EQ(entry->
name, relObjs2.getName());
705 entry =
nullptr; index = -1;
706 EXPECT_TRUE(DataStore::Instance().findStoreEntry(relObjs2[2], entry, index));
708 EXPECT_EQ(entry->
name, relObjs2.getName());
712 entry =
nullptr; index = -1;
713 EXPECT_FALSE(DataStore::Instance().findStoreEntry(&(*evtPtr), entry, index));
714 EXPECT_EQ(index, -1);
715 EXPECT_EQ(entry,
nullptr);
718 EXPECT_FALSE(DataStore::Instance().findStoreEntry(
nullptr, entry, index));
721 TEST_F(DataStoreTest, ListEntries)
724 EXPECT_EQ(0, DataStore::Instance().getListOfRelatedArrays(evtData).size());
726 DataStore::Instance().setInitializeActive(
true);
729 DataStore::Instance().setInitializeActive(
false);
731 EXPECT_TRUE(DataStore::Instance().hasRelation(evtData, profileInfo, DataStore::c_Event,
""));
732 EXPECT_FALSE(DataStore::Instance().hasRelation(profileInfo, evtData, DataStore::c_Event,
""));
733 EXPECT_FALSE(DataStore::Instance().hasRelation(evtData, profileInfo, DataStore::c_Event,
"SOMENONSENSE"));
734 EXPECT_FALSE(DataStore::Instance().hasRelation(evtData, profileInfo, DataStore::c_Persistent,
""));
735 EXPECT_FALSE(DataStore::Instance().hasRelation(profileInfo, evtData, DataStore::c_Persistent,
""));
737 EXPECT_EQ(1, DataStore::Instance().getListOfRelatedArrays(evtData).size());
738 EXPECT_EQ(1, DataStore::Instance().getListOfRelatedArrays(profileInfo).size());
740 EXPECT_EQ(1, DataStore::Instance().getListOfArrays(ProfileInfo::Class(), DataStore::c_Event).size());
741 EXPECT_EQ(0, DataStore::Instance().getListOfArrays(ProfileInfo::Class(), DataStore::c_Persistent).size());
742 EXPECT_EQ(1, DataStore::Instance().getListOfArrays(EventMetaData::Class(), DataStore::c_Persistent).size());
743 EXPECT_EQ(3, DataStore::Instance().getListOfArrays(EventMetaData::Class(), DataStore::c_Event).size());
745 EXPECT_EQ(1, DataStore::Instance().getListOfArrays(TObject::Class(), DataStore::c_Persistent).size());
746 EXPECT_EQ(4, DataStore::Instance().getListOfArrays(TObject::Class(), DataStore::c_Event).size());
748 EXPECT_EQ(1, DataStore::Instance().getListOfObjects(EventMetaData::Class(), DataStore::c_Event).size());
749 EXPECT_EQ(0, DataStore::Instance().getListOfObjects(EventMetaData::Class(), DataStore::c_Persistent).size());
750 EXPECT_EQ(1, DataStore::Instance().getListOfObjects(TObject::Class(), DataStore::c_Event).size());
751 EXPECT_EQ(0, DataStore::Instance().getListOfObjects(TObject::Class(), DataStore::c_Persistent).size());
754 TEST_F(DataStoreTest, Assign)
760 EXPECT_TRUE(evtData.
isValid());
767 EXPECT_FALSE(evtPtr.assign(
new ProfileInfo(),
true));
768 EXPECT_EQ(evtPtr->getEvent(), 42);
769 EXPECT_TRUE(evtPtr.assign(newobj,
true));
770 EXPECT_EQ(evtPtr->getEvent(), 123);