1 #include <framework/datastore/StoreArray.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 RelationsObjectTest :
public ::testing::Test {
19 evtData.registerInDataStore();
20 profileData.registerInDataStore();
21 relObjData.registerInDataStore();
23 for (
int i = 0; i < 10; ++i) {
25 profileData.appendNew();
26 relObjData.appendNew();
31 void TearDown()
override
33 DataStore::Instance().reset();
44 relObjData.registerRelationTo(profileData);
45 DataStore::Instance().setInitializeActive(
false);
47 (relObjData)[0]->addRelationTo((profileData)[0], -42.0);
51 EXPECT_TRUE(rels.
size() == 1);
52 EXPECT_TRUE(rels.
object(0) == (profileData)[0]);
53 EXPECT_DOUBLE_EQ(rels.
weight(0), -42.0);
54 EXPECT_EQ(0u, relObjData[1]->getRelationsTo<ProfileInfo>().size());
55 EXPECT_EQ(0u, relObjData[0]->getRelationsFrom<ProfileInfo>().size());
56 EXPECT_EQ(1u, relObjData[0]->getRelationsWith<ProfileInfo>().size());
59 EXPECT_TRUE(profileData[0] == relObjData[0]->getRelatedTo<ProfileInfo>());
60 EXPECT_TRUE(
nullptr == relObjData[1]->getRelatedTo<ProfileInfo>());
61 EXPECT_TRUE(
nullptr == relObjData[0]->getRelatedFrom<ProfileInfo>());
62 EXPECT_TRUE(profileData[0] == relObjData[0]->getRelated<ProfileInfo>());
65 EXPECT_TRUE(std::make_pair(profileData[0], -42.0f) == relObjData[0]->getRelatedToWithWeight<ProfileInfo>());
67 EXPECT_TRUE(std::make_pair(profileNullPtr, 1.0f) == relObjData[1]->getRelatedToWithWeight<ProfileInfo>());
68 EXPECT_TRUE(std::make_pair(profileNullPtr, 1.0f) == relObjData[0]->getRelatedFromWithWeight<ProfileInfo>());
69 EXPECT_TRUE(std::make_pair(profileData[0], -42.0f) == relObjData[0]->getRelatedWithWeight<ProfileInfo>());
73 (relObjData)[0]->addRelationTo(
static_cast<TObject*
>(
nullptr));
74 (relObjData)[0]->addRelationTo(
static_cast<ProfileInfo*
>(
nullptr));
78 EXPECT_B2FATAL((relObjData)[0]->addRelationTo(¬InArray));
82 TEST_F(RelationsObjectTest, IndexUpdating)
84 relObjData.registerRelationTo(profileData);
85 DataStore::Instance().setInitializeActive(
false);
88 EXPECT_FALSE((relObjData)[0]->getRelated<ProfileInfo>() !=
nullptr);
90 (relObjData)[0]->addRelationTo((profileData)[0], -42.0);
93 EXPECT_TRUE((relObjData)[0]->getRelated<ProfileInfo>() !=
nullptr);
96 EXPECT_FALSE((relObjData)[1]->getRelated<ProfileInfo>() !=
nullptr);
98 (relObjData)[1]->addRelationTo((profileData)[0], -42.0);
101 EXPECT_TRUE((relObjData)[1]->getRelated<ProfileInfo>() !=
nullptr);
105 TEST_F(RelationsObjectTest, RelationsObjectArrayIndex)
107 for (
int i = 0; i < relObjData.getEntries(); i++) {
108 EXPECT_TRUE((relObjData)[i]->getArrayName() == relObjData.getName());
109 EXPECT_TRUE((relObjData)[i]->getArrayIndex() == i);
118 TEST_F(RelationsObjectTest, DuplicateRelations)
120 evtData.registerRelationTo(relObjData);
121 relObjData.registerRelationTo(evtData);
122 DataStore::Instance().setInitializeActive(
false);
125 DataStore::Instance().addRelationFromTo((evtData)[0], (relObjData)[1], 1.0);
126 DataStore::Instance().addRelationFromTo((evtData)[0], (relObjData)[1], 2.0);
131 EXPECT_EQ(2u, rels1.
size());
135 EXPECT_FLOAT_EQ(1.0, rels1.
weight(0));
136 EXPECT_FLOAT_EQ(2.0, rels1.
weight(1));
137 EXPECT_FLOAT_EQ(1.0, relObjData[1]->getRelatedFromWithWeight<EventMetaData>().second);
141 DataStore::Instance().addRelationFromTo((relObjData)[1], (evtData)[0], 1.0);
144 EXPECT_EQ(2u, rels2.
size());
147 EXPECT_EQ(3u, rels3.
size());
149 for (
int i = 0; i < (int)rels3.
size(); i++) {
152 EXPECT_DOUBLE_EQ(sum, 1.0 + 1.0 + 2.0);
155 TEST_F(RelationsObjectTest, RelationsToSameArray)
157 relObjData.registerRelationTo(relObjData);
158 DataStore::Instance().setInitializeActive(
false);
160 relObjData[0]->addRelationTo(relObjData[1]);
161 EXPECT_TRUE(relObjData[0] == relObjData[1]->getRelated<RelationsObject>());
162 EXPECT_TRUE(relObjData[0] == relObjData[1]->getRelatedFrom<RelationsObject>());
163 EXPECT_TRUE(relObjData[1] == relObjData[0]->getRelated<RelationsObject>());
164 EXPECT_TRUE(relObjData[1] == relObjData[0]->getRelatedTo<RelationsObject>());
165 EXPECT_TRUE(
nullptr == relObjData[2]->getRelated<RelationsObject>());
166 EXPECT_TRUE(
nullptr == relObjData[2]->getRelatedFrom<RelationsObject>());
167 EXPECT_TRUE(
nullptr == relObjData[2]->getRelatedTo<RelationsObject>());
169 EXPECT_TRUE(
nullptr == relObjData[1]->getRelatedTo<RelationsObject>());
170 EXPECT_TRUE(
nullptr == relObjData[0]->getRelatedFrom<RelationsObject>());
173 relObjData[3]->addRelationTo(relObjData[3]);
174 EXPECT_TRUE(relObjData[3] == relObjData[3]->getRelated<RelationsObject>());
175 EXPECT_TRUE(relObjData[3] == relObjData[3]->getRelatedFrom<RelationsObject>());
176 EXPECT_TRUE(relObjData[3] == relObjData[3]->getRelatedTo<RelationsObject>());
179 TEST_F(RelationsObjectTest, ModifyRelations)
181 relObjData.registerRelationTo(profileData);
182 DataStore::Instance().setInitializeActive(
false);
184 (relObjData)[0]->addRelationTo((profileData)[0], -42.0);
188 EXPECT_DOUBLE_EQ(rels.
weight(0), -42.0);
190 EXPECT_DOUBLE_EQ(rels.
weight(0), -3.0);
192 EXPECT_DOUBLE_EQ(rels2.
weight(0), -3.0);
195 EXPECT_EQ(1u, relObjData[0]->getRelationsTo<ProfileInfo>().size());
196 EXPECT_EQ(1u, relObjData[0]->getRelationsWith<ProfileInfo>().size());
198 EXPECT_EQ(0u, rels2.
size());
199 EXPECT_EQ(0u, relObjData[0]->getRelationsTo<ProfileInfo>().size());
200 EXPECT_EQ(0u, relObjData[0]->getRelationsWith<ProfileInfo>().size());
204 TEST_F(RelationsObjectTest, NamedRelationsWithInvalidName)
206 const std::string relationName =
"ExtraRelation WithSpaceInName";
207 EXPECT_B2FATAL(relObjData.registerRelationTo(profileData, DataStore::c_Event, DataStore::c_WriteOut, relationName));
211 TEST_F(RelationsObjectTest, NamedRelations)
213 const std::string relationName =
"ExtraRelation";
214 relObjData.registerRelationTo(profileData, DataStore::c_Event, DataStore::c_WriteOut, relationName);
215 DataStore::Instance().setInitializeActive(
false);
218 EXPECT_TRUE(relObjData.hasRelationTo(profileData, DataStore::c_Event, relationName));
219 EXPECT_FALSE(profileData.hasRelationTo(relObjData, DataStore::c_Event, relationName));
220 EXPECT_FALSE(profileData.hasRelationTo(evtData, DataStore::c_Event, relationName));
221 EXPECT_FALSE(relObjData.hasRelationTo(profileData));
222 EXPECT_FALSE(profileData.hasRelationTo(relObjData));
224 (relObjData)[0]->addRelationTo((profileData)[0], -42.0, relationName);
228 EXPECT_TRUE(rels.
size() == 1);
229 EXPECT_TRUE(rels.
object(0) == (profileData)[0]);
230 EXPECT_DOUBLE_EQ(rels.
weight(0), -42.0);
231 EXPECT_EQ(0u, relObjData[1]->getRelationsTo<ProfileInfo>(
"", relationName).size());
232 EXPECT_EQ(0u, relObjData[0]->getRelationsFrom<ProfileInfo>(
"", relationName).size());
233 EXPECT_EQ(1u, relObjData[0]->getRelationsWith<ProfileInfo>(
"", relationName).size());
236 EXPECT_TRUE(profileData[0] == relObjData[0]->getRelatedTo<ProfileInfo>(
"", relationName));
237 EXPECT_TRUE(
nullptr == relObjData[1]->getRelatedTo<ProfileInfo>(
"", relationName));
238 EXPECT_TRUE(
nullptr == relObjData[0]->getRelatedFrom<ProfileInfo>(
"", relationName));
239 EXPECT_TRUE(profileData[0] == relObjData[0]->getRelated<ProfileInfo>(
"", relationName));
242 EXPECT_TRUE(std::make_pair(profileData[0], -42.0f) == relObjData[0]->getRelatedToWithWeight<ProfileInfo>(
"", relationName));
244 EXPECT_TRUE(std::make_pair(profileNullPtr, 1.0f) == relObjData[1]->getRelatedToWithWeight<ProfileInfo>(
"", relationName));
245 EXPECT_TRUE(std::make_pair(profileNullPtr, 1.0f) == relObjData[0]->getRelatedFromWithWeight<ProfileInfo>(
"", relationName));
246 EXPECT_TRUE(std::make_pair(profileData[0], -42.0f) == relObjData[0]->getRelatedWithWeight<ProfileInfo>(
"", relationName));
251 DataStore::Instance().getRelationsWith(DataStore::c_FromSide, (relObjData)[0], storeEntry, index,
252 TObject::Class(),
"ALL",
"");
255 (relObjData)[0]->addRelationTo(
static_cast<TObject*
>(
nullptr), 1.0, relationName);
256 (relObjData)[0]->addRelationTo(
static_cast<ProfileInfo*
>(
nullptr), 1.0, relationName);
260 EXPECT_B2FATAL((relObjData)[0]->addRelationTo(¬InArray, 1.0, relationName));