1 #include <framework/datastore/RelationIndex.h>
2 #include <framework/dataobjects/EventMetaData.h>
3 #include <framework/dataobjects/ProfileInfo.h>
4 #include <framework/datastore/RelationsObject.h>
5 #include <framework/utilities/TestHelpers.h>
7 #include <gtest/gtest.h>
14 class RelationsInternal :
public ::testing::Test {
19 DataStore::Instance().setInitializeActive(
true);
20 evtData.registerInDataStore();
21 profileData.registerInDataStore();
22 relObjData.registerInDataStore();
23 DataStore::Instance().setInitializeActive(
false);
25 for (
int i = 0; i < 10; ++i) {
27 profileData.appendNew();
28 relObjData.appendNew();
33 void TearDown()
override
35 DataStore::Instance().reset();
38 void findRelationsCheckContents();
46 TEST_F(RelationsInternal, RelationCreate)
48 DataStore::Instance().setInitializeActive(
true);
49 evtData.registerRelationTo(profileData);
50 DataStore::Instance().setInitializeActive(
false);
53 EXPECT_FALSE(relation);
55 EXPECT_TRUE(relation.getFromAccessorParams() == evtData.getAccessorParams());
56 EXPECT_TRUE(relation.getToAccessorParams() == profileData.getAccessorParams());
59 EXPECT_TRUE(relation);
60 EXPECT_TRUE(relation.getFromAccessorParams() == evtData.getAccessorParams());
61 EXPECT_TRUE(relation.getToAccessorParams() == profileData.getAccessorParams());
65 TEST_F(RelationsInternal, RelationFind)
67 DataStore::Instance().setInitializeActive(
true);
68 EXPECT_FALSE(evtData.optionalRelationTo(profileData));
69 EXPECT_FALSE(evtData.requireRelationTo(profileData));
73 evtData2.registerInDataStore(
"OwnName");
75 DataStore::Instance().setInitializeActive(
false);
78 EXPECT_FALSE(
RelationArray(DataStore::relationName(evtData.getName(), profileData.getName()), DataStore::c_Event));
80 EXPECT_TRUE(
RelationArray(evtData, profileData,
"", DataStore::c_Event));
81 string name = relation.getName();
83 EXPECT_EQ(
"OwnName", evtData2.getName());
86 RelationArray relationAttachedUsingName(name, DataStore::c_Event);
88 EXPECT_TRUE(relationAttachedUsingName.getFromAccessorParams() == evtData.getAccessorParams());
89 EXPECT_TRUE(relationAttachedUsingName.getToAccessorParams() == profileData.getAccessorParams());
90 EXPECT_TRUE(relationAttachedUsingName);
93 EXPECT_FALSE(
RelationArray(DataStore::relationName(evtData2.getName(), profileData.getName()), DataStore::c_Event));
94 EXPECT_FALSE(
RelationArray(
"OwnNameToProfileInfos", DataStore::c_Event));
97 EXPECT_TRUE(relation2.getName() ==
"OwnNameToProfileInfos");
101 EXPECT_B2FATAL(evtData.requireRelationTo(profileData));
105 TEST_F(RelationsInternal, RelationWrongDeathTest)
107 DataStore::Instance().setInitializeActive(
true);
109 relation1.registerInDataStore();
110 DataStore::Instance().setInitializeActive(
false);
114 EXPECT_B2FATAL(
RelationArray(profileData, evtData,
"test").add(0, 0, 1.0));
115 EXPECT_B2FATAL(
RelationArray(profileData, evtData,
"test")[0]);
116 EXPECT_B2FATAL(
RelationArray(profileData, evtData,
"test").getModified());
120 TEST_F(RelationsInternal, RegistrationWithDefaultNames)
123 EXPECT_B2FATAL(relObjData[0]->addRelationTo(profileData[3]));
124 EXPECT_B2FATAL(DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[1], 2.0));
126 DataStore::Instance().setInitializeActive(
true);
127 relObjData.registerRelationTo(profileData);
128 evtData.registerRelationTo(profileData);
129 DataStore::Instance().setInitializeActive(
false);
132 relObjData[0]->addRelationTo(profileData[4]);
133 DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[3], 2.0);
140 TEST_F(RelationsInternal, RelationDefaultConstructed)
142 DataStore::Instance().setInitializeActive(
true);
144 array.registerInDataStore();
145 DataStore::Instance().setInitializeActive(
false);
148 ASSERT_TRUE(DataStore::Instance().createObject(rel,
false, array));
150 EXPECT_FALSE(array.isValid());
157 TEST_F(RelationsInternal, BuildIndex)
159 DataStore::Instance().setInitializeActive(
true);
160 evtData.registerRelationTo(profileData);
161 DataStore::Instance().setInitializeActive(
false);
164 relation.add(0, 0, 1.0);
165 relation.add(0, 1, 2.0);
166 relation.add(0, 2, 3.0);
167 relation.consolidate();
168 EXPECT_EQ(relation.getEntries(), 1);
171 EXPECT_EQ(relIndex.
size(), 3u);
173 relation.add(1, 0, 1.0);
175 EXPECT_EQ(relIndex2.
size(), 4u);
178 EXPECT_EQ(relIndex.
size(), 4u);
202 double allweights(0);
205 allweights +=
e.weight;
208 EXPECT_DOUBLE_EQ(allweights, 6.0);
212 double allweights(0);
215 allweights +=
e.weight;
218 EXPECT_DOUBLE_EQ(allweights, 2.0);
222 double allweights(0);
223 for (
const auto& e : relIndex.
getElementsTo((profileData)[4])) {
225 allweights +=
e.weight;
228 EXPECT_DOUBLE_EQ(allweights, 0.0);
233 TEST_F(RelationsInternal, InconsistentIndexDeathTest)
235 DataStore::Instance().setInitializeActive(
true);
236 evtData.registerRelationTo(profileData);
237 DataStore::Instance().setInitializeActive(
false);
240 relation.add(0, 10, 1.0);
242 EXPECT_B2FATAL(rel_t relIndex);
244 relation.add(10, 0, 1.0);
245 EXPECT_B2FATAL(rel_t relIndex);
250 TEST_F(RelationsInternal, EmptyIndex)
252 DataStore::Instance().setInitializeActive(
true);
253 evtData.registerRelationTo(profileData);
254 DataStore::Instance().setInitializeActive(
false);
258 EXPECT_EQ(index.size(), 0u);
259 EXPECT_EQ(index.getFromAccessorParams().first,
"");
260 EXPECT_EQ(index.getToAccessorParams().first,
"");
264 TEST_F(RelationsInternal, WrongRelationIndexDeathTest)
268 DataStore::Instance().setInitializeActive(
true);
270 relation.registerInDataStore();
272 eventData.registerInDataStore();
274 relation2.registerInDataStore();
275 DataStore::Instance().setInitializeActive(
false);
279 EXPECT_B2FATAL(rel_t(evtData, profileData,
"test"));
280 EXPECT_B2FATAL(rel_t(
"test"));
283 EXPECT_B2FATAL(rel_t(eventData, profileData,
"test2"));
288 EXPECT_TRUE(rel_t(
"test2"));
292 void RelationsInternal::findRelationsCheckContents()
296 EXPECT_EQ(toRels.
size(), 3u);
298 EXPECT_DOUBLE_EQ(toRels.
weight(0), 1.0);
299 EXPECT_DOUBLE_EQ(toRels.
weight(1), 2.0);
300 EXPECT_DOUBLE_EQ(toRels.
weight(2), -3.0);
302 EXPECT_TRUE(toRels.
object(0) == (profileData)[0]);
303 EXPECT_TRUE(toRels.
object(1) == (profileData)[1]);
304 EXPECT_TRUE(toRels.
object(2) == (profileData)[2]);
316 EXPECT_EQ(fromRels.
size(), 1u);
317 EXPECT_DOUBLE_EQ(fromRels.
weight(0), -3.0);
318 EXPECT_TRUE(fromRels.
object(0) == fromObj);
319 EXPECT_TRUE(fromRels[0] == fromObj);
322 EXPECT_EQ(DataStore::getRelationsWithObj<EventMetaData>(fromObj).size(), 0u);
326 TEST_F(RelationsInternal, FindRelations)
328 DataStore::Instance().setInitializeActive(
true);
329 evtData.registerRelationTo(profileData);
330 DataStore::Instance().setInitializeActive(
false);
335 EXPECT_EQ(toRels.
size(), 0u);
338 EXPECT_EQ(fromRels.
size(), 0u);
342 EXPECT_EQ(toRels2.
size(), 0u);
344 EXPECT_EQ(fromRels2.
size(), 0u);
347 relation.add(0, 0, 1.0);
348 relation.add(0, 1, 2.0);
349 relation.add(0, 2, -3.0);
351 findRelationsCheckContents();
355 relation.consolidate();
356 findRelationsCheckContents();
360 TEST_F(RelationsInternal, AddRelations)
362 DataStore::Instance().setInitializeActive(
true);
363 evtData.registerRelationTo(profileData);
364 DataStore::Instance().setInitializeActive(
false);
366 DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[0], 1.0);
367 DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[1], 2.0);
368 DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[2], -3.0);
370 findRelationsCheckContents();
374 TEST_F(RelationsInternal, GetRelationsWith)
376 DataStore::Instance().setInitializeActive(
true);
377 evtData.registerRelationTo(profileData);
378 DataStore::Instance().setInitializeActive(
false);
380 DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[0], 1.0);
381 DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[1], 2.0);
382 DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[2], 3.0);
385 EXPECT_EQ(DataStore::getRelationsWithObj<EventMetaData>((evtData)[0]).size(), 0u);
386 EXPECT_EQ(DataStore::getRelationsWithObj<EventMetaData>((profileData)[3]).size(), 0u);
389 EXPECT_EQ(profRels.
size(), 3u);
390 EXPECT_EQ(profRels.
weight(0), 1.0);
393 EXPECT_EQ(eventRels.
size(), 1u);
394 EXPECT_EQ(eventRels.
weight(0), 1.0);
398 TEST_F(RelationsInternal, SearchAll)
403 DataStore::Instance().setInitializeActive(
true);
404 profileData2.registerInDataStore();
405 evtData.registerRelationTo(profileData);
406 evtData.registerRelationTo(profileData2);
407 DataStore::Instance().setInitializeActive(
false);
409 DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[0], 1.0);
410 DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[1], 2.0);
411 DataStore::Instance().addRelationFromTo((evtData)[0], (profileData)[2], -3.0);
414 profileData2.appendNew();
415 DataStore::Instance().addRelationFromTo((evtData)[0], profileData2[0], 42.0);
418 findRelationsCheckContents();
423 EXPECT_EQ(toRels.
size(), 4u);
426 for (
int i = 0; i < (int)toRels.
size(); i++) {
429 EXPECT_DOUBLE_EQ(sum, 42.0 + 1 + 2 - 3);
432 EXPECT_EQ(DataStore::getRelationsWithObj<ProfileInfo>(fromObj, profileData.getName()).size(), 3u);
434 EXPECT_EQ(DataStore::getRelationsWithObj<ProfileInfo>(fromObj, profileData2.getName()).size(), 1u);
436 EXPECT_EQ(DataStore::getRelationsWithObj<ProfileInfo>(fromObj,
"DoesntExist").size(), 0u);
440 EXPECT_EQ(DataStore::getRelationsWithObj<EventMetaData>(toObj).size(), 1u);
442 EXPECT_EQ(DataStore::getRelationsWithObj<EventMetaData>(toObj,
"ALL").size(), 1u);
444 EXPECT_EQ(DataStore::getRelationsWithObj<TObject>(toObj,
"ALL").size(), 1u);
447 EXPECT_EQ(DataStore::getRelationsWithObj<EventMetaData>(fromObj,
"ALL").size(), 0u);
449 EXPECT_EQ(DataStore::getRelationsWithObj<TObject>(fromObj,
"ALL").size(), 4u);
454 TEST_F(RelationsInternal, ListOfRelatedArrays)
460 EXPECT_EQ(0u, DataStore::Instance().getListOfRelatedArrays(profileData2).size());
461 EXPECT_EQ(0u, DataStore::Instance().getListOfRelatedArrays(profileData).size());
462 EXPECT_EQ(0u, DataStore::Instance().getListOfRelatedArrays(evtData).size());
464 DataStore::Instance().setInitializeActive(
true);
465 profileData2.registerInDataStore();
466 evtData.registerRelationTo(profileData);
467 evtData.registerRelationTo(profileData2);
468 DataStore::Instance().setInitializeActive(
false);
470 EXPECT_EQ(1u, DataStore::Instance().getListOfRelatedArrays(profileData2).size());
471 EXPECT_EQ(1u, DataStore::Instance().getListOfRelatedArrays(profileData).size());
472 EXPECT_EQ(2u, DataStore::Instance().getListOfRelatedArrays(evtData).size());
474 EXPECT_EQ(evtData.getName(), DataStore::Instance().getListOfRelatedArrays(profileData2).at(0));
475 EXPECT_EQ(evtData.getName(), DataStore::Instance().getListOfRelatedArrays(profileData).at(0));
478 TEST_F(RelationsInternal, StoreArray_clear_cleans_relations)
480 DataStore::Instance().setInitializeActive(
true);
481 evtData.registerRelationTo(relObjData);
482 relObjData.registerRelationTo(profileData);
483 evtData.registerRelationTo(profileData);
484 DataStore::Instance().setInitializeActive(
false);
486 DataStore::Instance().addRelationFromTo((evtData)[0], (relObjData)[0], 1.0);
487 DataStore::Instance().addRelationFromTo((relObjData)[1], (profileData)[9], 1.0);
488 DataStore::Instance().addRelationFromTo((evtData)[1], (profileData)[1], 2.0);
493 EXPECT_EQ(DataStore::getRelationsWithObj<ProfileInfo>(relObjData[1]).size(), 0u);
494 EXPECT_EQ(DataStore::getRelationsWithObj<EventMetaData>(relObjData[0]).size(), 0u);