|
@@ -29,6 +29,7 @@ public:
|
|
|
uint64 mUInt64 = 0;
|
|
|
float mFloat = 0;
|
|
|
bool mBool = false;
|
|
|
+ Float3 mFloat3 = { };
|
|
|
Quat mQuat = Quat::sIdentity();
|
|
|
Vec3 mVec3 = Vec3::sZero();
|
|
|
Vec4 mVec4 = Vec4::sZero();
|
|
@@ -36,7 +37,17 @@ public:
|
|
|
string mString;
|
|
|
};
|
|
|
|
|
|
-class TestSerializable : public TestSerializableBase
|
|
|
+class TestSerializableBase2
|
|
|
+{
|
|
|
+ JPH_DECLARE_SERIALIZABLE_VIRTUAL_BASE(TestSerializableBase2)
|
|
|
+
|
|
|
+public:
|
|
|
+ virtual ~TestSerializableBase2() = default;
|
|
|
+
|
|
|
+ uint32 mBase2 = 0;
|
|
|
+};
|
|
|
+
|
|
|
+class TestSerializable : public TestSerializableBase, public TestSerializableBase2
|
|
|
{
|
|
|
JPH_DECLARE_SERIALIZABLE_VIRTUAL(TestSerializable)
|
|
|
|
|
@@ -45,6 +56,8 @@ public:
|
|
|
vector<int> mIntVector;
|
|
|
StaticArray<bool, 10> mBoolVector;
|
|
|
float mFloatVector[3] = { 0, 0, 0 };
|
|
|
+ vector<float> mArrayOfVector[3];
|
|
|
+ vector<vector<int>> mVectorOfVector;
|
|
|
TestSerializable * mPointer = nullptr;
|
|
|
Ref<TestSerializable> mReference;
|
|
|
RefConst<TestSerializable> mReferenceConst;
|
|
@@ -52,28 +65,37 @@ public:
|
|
|
|
|
|
JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL(TestSerializableBase)
|
|
|
{
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mUInt8)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mUInt16)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mInt)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mUInt32)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mUInt64)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mFloat)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mBool)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mQuat)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mVec3)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mVec4)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mMat44)
|
|
|
- JPH_ADD_ATTRIBUTE(TestSerializable, mString)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mUInt8)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mUInt16)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mInt)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mUInt32)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mUInt64)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mFloat)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mBool)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mFloat3)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mQuat)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mVec3)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mVec4)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mMat44)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase, mString)
|
|
|
+}
|
|
|
+
|
|
|
+JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL(TestSerializableBase2)
|
|
|
+{
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializableBase2, mBase2)
|
|
|
}
|
|
|
|
|
|
JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL(TestSerializable)
|
|
|
{
|
|
|
JPH_ADD_BASE_CLASS(TestSerializable, TestSerializableBase)
|
|
|
+ JPH_ADD_BASE_CLASS(TestSerializable, TestSerializableBase2)
|
|
|
|
|
|
JPH_ADD_ENUM_ATTRIBUTE(TestSerializable, mEnum)
|
|
|
JPH_ADD_ATTRIBUTE(TestSerializable, mIntVector)
|
|
|
JPH_ADD_ATTRIBUTE(TestSerializable, mBoolVector)
|
|
|
JPH_ADD_ATTRIBUTE(TestSerializable, mFloatVector)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializable, mArrayOfVector)
|
|
|
+ JPH_ADD_ATTRIBUTE(TestSerializable, mVectorOfVector)
|
|
|
JPH_ADD_ATTRIBUTE(TestSerializable, mPointer)
|
|
|
JPH_ADD_ATTRIBUTE(TestSerializable, mReference)
|
|
|
JPH_ADD_ATTRIBUTE(TestSerializable, mReferenceConst)
|
|
@@ -91,21 +113,25 @@ TEST_SUITE("ObjectStreamTest")
|
|
|
test->mUInt64 = 0xf5f6f7f8f9fafbfc;
|
|
|
test->mFloat = 0.12345f;
|
|
|
test->mBool = true;
|
|
|
+ test->mFloat3 = Float3(9, 10, 11);
|
|
|
test->mVec3 = Vec3(6, 7, 8);
|
|
|
test->mVec4 = Vec4(9, 10, 11, 12);
|
|
|
test->mQuat = Quat::sRotation(Vec3::sAxisX(), 0.1234f);
|
|
|
test->mMat44 = Mat44::sRotationTranslation(Quat::sRotation(Vec3::sAxisY(), 0.4567f), Vec3(13, 14, 15));
|
|
|
test->mString = "\"test string\"";
|
|
|
test->mEnum = B;
|
|
|
- test->mIntVector.push_back(1);
|
|
|
- test->mIntVector.push_back(2);
|
|
|
- test->mIntVector.push_back(3);
|
|
|
+ test->mIntVector = { 1, 2, 3, 4, 5 };
|
|
|
test->mBoolVector.push_back(true);
|
|
|
test->mBoolVector.push_back(false);
|
|
|
test->mBoolVector.push_back(true);
|
|
|
test->mFloatVector[0] = 1.0f;
|
|
|
test->mFloatVector[1] = 2.0f;
|
|
|
test->mFloatVector[2] = 3.0f;
|
|
|
+ test->mArrayOfVector[0] = { 1, 2, 3 };
|
|
|
+ test->mArrayOfVector[1] = { 4, 5 };
|
|
|
+ test->mArrayOfVector[2] = { 6, 7, 8, 9 };
|
|
|
+ test->mVectorOfVector = { { 10, 11 }, { 12, 13, 14 }, { 15, 16, 17, 18 }};
|
|
|
+ test->mBase2 = 0x9876;
|
|
|
|
|
|
TestSerializable *test2 = new TestSerializable();
|
|
|
test2->mFloat = 4.5f;
|
|
@@ -125,24 +151,24 @@ TEST_SUITE("ObjectStreamTest")
|
|
|
CHECK(inInput->mUInt64 == inOutput->mUInt64);
|
|
|
CHECK(inInput->mFloat == inOutput->mFloat);
|
|
|
CHECK(inInput->mBool == inOutput->mBool);
|
|
|
+ CHECK(inInput->mFloat3 == inOutput->mFloat3);
|
|
|
CHECK(inInput->mQuat == inOutput->mQuat);
|
|
|
CHECK(inInput->mVec3 == inOutput->mVec3);
|
|
|
CHECK(inInput->mVec4 == inOutput->mVec4);
|
|
|
CHECK(inInput->mMat44 == inOutput->mMat44);
|
|
|
CHECK(inInput->mString == inOutput->mString);
|
|
|
CHECK(inInput->mEnum == inOutput->mEnum);
|
|
|
-
|
|
|
- CHECK(inInput->mIntVector.size() == inOutput->mIntVector.size());
|
|
|
- for (size_t i = 0; i < min(inInput->mIntVector.size(), inOutput->mIntVector.size()); ++i)
|
|
|
- CHECK(inInput->mIntVector[i] == inOutput->mIntVector[i]);
|
|
|
-
|
|
|
- CHECK(inInput->mBoolVector.size() == inOutput->mBoolVector.size());
|
|
|
- for (uint32 i = 0; i < min(inInput->mBoolVector.size(), inOutput->mBoolVector.size()); ++i)
|
|
|
- CHECK(inInput->mBoolVector[i] == inOutput->mBoolVector[i]);
|
|
|
+ CHECK(inInput->mIntVector == inOutput->mIntVector);
|
|
|
+ CHECK(inInput->mBoolVector == inOutput->mBoolVector);
|
|
|
|
|
|
for (uint32 i = 0; i < size(inInput->mFloatVector); ++i)
|
|
|
CHECK(inInput->mFloatVector[i] == inOutput->mFloatVector[i]);
|
|
|
|
|
|
+ for (uint32 i = 0; i < size(inInput->mArrayOfVector); ++i)
|
|
|
+ CHECK(inInput->mArrayOfVector[i] == inOutput->mArrayOfVector[i]);
|
|
|
+
|
|
|
+ CHECK(inInput->mVectorOfVector == inOutput->mVectorOfVector);
|
|
|
+
|
|
|
CHECK(inOutput->mPointer == inOutput->mReference);
|
|
|
CHECK(inOutput->mPointer == inOutput->mReferenceConst);
|
|
|
|
|
@@ -155,11 +181,13 @@ TEST_SUITE("ObjectStreamTest")
|
|
|
CHECK(inOutput->mReference->GetRefCount() == uint32(2));
|
|
|
CHECK(inOutput->mReferenceConst->GetRefCount() == uint32(2));
|
|
|
}
|
|
|
+
|
|
|
+ CHECK(inInput->mBase2 == inOutput->mBase2);
|
|
|
}
|
|
|
|
|
|
TEST_CASE("TestObjectStreamLoadSaveText")
|
|
|
{
|
|
|
- Factory::sInstance.Register(JPH_RTTI(TestSerializable));
|
|
|
+ Factory::sInstance->Register(JPH_RTTI(TestSerializable));
|
|
|
|
|
|
TestSerializable *test = CreateTestObject();
|
|
|
|
|
@@ -169,6 +197,11 @@ TEST_SUITE("ObjectStreamTest")
|
|
|
TestSerializable *test_out = nullptr;
|
|
|
REQUIRE(ObjectStreamIn::sReadObject(stream, test_out));
|
|
|
|
|
|
+ // Check that DynamicCast returns the right offsets
|
|
|
+ CHECK(DynamicCast<TestSerializable>(test_out) == test_out);
|
|
|
+ CHECK(DynamicCast<TestSerializableBase>(test_out) == static_cast<TestSerializableBase *>(test_out));
|
|
|
+ CHECK(DynamicCast<TestSerializableBase2>(test_out) == static_cast<TestSerializableBase2 *>(test_out));
|
|
|
+
|
|
|
CompareObjects(test, test_out);
|
|
|
|
|
|
delete test;
|
|
@@ -177,7 +210,7 @@ TEST_SUITE("ObjectStreamTest")
|
|
|
|
|
|
TEST_CASE("TestObjectStreamLoadSaveBinary")
|
|
|
{
|
|
|
- Factory::sInstance.Register(JPH_RTTI(TestSerializable));
|
|
|
+ Factory::sInstance->Register(JPH_RTTI(TestSerializable));
|
|
|
|
|
|
TestSerializable *test = CreateTestObject();
|
|
|
|