Files
uLib/src/Core/testing/HRPTest.cpp
2026-03-23 15:09:35 +00:00

84 lines
2.2 KiB
C++

#include <iostream>
#include <sstream>
#include "Core/Object.h"
#include "Core/Property.h"
#include "Core/Serializable.h"
#include "Core/Archives.h"
using namespace uLib;
struct SimpleObject {
int value;
std::string name;
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & HRP(value);
ar & HRP(name);
}
};
struct DynamicObject : public Object {
float width;
int height;
DynamicObject() : width(10.0f), height(20) {
// Automatic registration of properties based on serialize/HRP
ULIB_ACTIVATE_PROPERTIES(*this);
}
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & HRP(width);
ar & HRP(height);
}
};
int main() {
SimpleObject obj;
obj.value = 42;
obj.name = "TestObject";
std::cout << "Testing HRP Serialization to Log..." << std::endl;
std::stringstream ss;
{
uLib::Archive::log_archive ar(ss);
ar << boost::serialization::make_nvp("Object", obj);
}
std::cout << ss.str() << std::endl;
std::cout << "Testing HRP Serialization to HRT..." << std::endl;
ss.str("");
{
uLib::Archive::hrt_oarchive ar(ss);
ar << obj;
}
std::cout << ss.str() << std::endl;
std::cout << "Testing HRP Serialization to XML..." << std::endl;
ss.str("");
{
uLib::Archive::xml_oarchive ar(ss);
ar << boost::serialization::make_nvp("Object", obj);
}
std::cout << ss.str() << std::endl;
std::cout << "Testing Dynamic Property Creation via ULIB_ACTIVATE_PROPERTIES macro..." << std::endl;
DynamicObject dynObj;
// (properties were already created in DynamicObject constructor via macro)
std::cout << "Registered Properties in dynObj:" << std::endl;
const auto& props = dynObj.GetProperties();
for (auto* p : props) {
std::cout << " - [" << p->GetTypeName() << "] " << p->GetName() << " = " << p->GetValueAsString() << std::endl;
}
if (props.size() == 2) {
std::cout << "Dynamic Property Creation SUCCESS!" << std::endl;
} else {
std::cout << "Dynamic Property Creation FAILED (Expected 2, got " << props.size() << ")" << std::endl;
}
return 0;
}