more tests on optional serialization
parent
e4e43d5d16
commit
3cdbebbf63
|
@ -1,6 +1,7 @@
|
||||||
// A hack to serialize std::optional<T> to boost::archive
|
// Functionality to serialize std::optional<T> to boost::archive
|
||||||
// Don't know if it will work. Trying to follow this:
|
// Following this:
|
||||||
// PR: https://github.com/boostorg/serialization/pull/148/files#
|
// PR: https://github.com/boostorg/serialization/pull/148/files#
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
|
|
|
@ -60,6 +60,10 @@ public:
|
||||||
TestOptionalStruct() = default;
|
TestOptionalStruct() = default;
|
||||||
TestOptionalStruct(const int& opt)
|
TestOptionalStruct(const int& opt)
|
||||||
: opt(opt) {}
|
: opt(opt) {}
|
||||||
|
bool operator==(const TestOptionalStruct& other) const {
|
||||||
|
// check the values are equal
|
||||||
|
return *opt == *other.opt;
|
||||||
|
}
|
||||||
friend class boost::serialization::access;
|
friend class boost::serialization::access;
|
||||||
template <class Archive>
|
template <class Archive>
|
||||||
void serialize(Archive& ar, const unsigned int /*version*/) {
|
void serialize(Archive& ar, const unsigned int /*version*/) {
|
||||||
|
@ -104,6 +108,47 @@ TEST(StdOptionalSerialization, SerializTestOptionalStructUninitialized) {
|
||||||
EXPECT(serializationTestHelpers::equalsXML(optStruct));
|
EXPECT(serializationTestHelpers::equalsXML(optStruct));
|
||||||
EXPECT(serializationTestHelpers::equalsBinary(optStruct));
|
EXPECT(serializationTestHelpers::equalsBinary(optStruct));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test for serialization of std::optional<TestOptionalStruct>
|
||||||
|
TEST(StdOptionalSerialization, SerializTestOptionalStructPointer) {
|
||||||
|
// Create an optional
|
||||||
|
std::optional<TestOptionalStruct> opt(TestOptionalStruct(42));
|
||||||
|
|
||||||
|
// Serialize it
|
||||||
|
std::stringstream ss;
|
||||||
|
boost::archive::text_oarchive oa(ss);
|
||||||
|
oa << opt;
|
||||||
|
|
||||||
|
// Deserialize it
|
||||||
|
std::optional<TestOptionalStruct> opt2;
|
||||||
|
boost::archive::text_iarchive ia(ss);
|
||||||
|
ia >> opt2;
|
||||||
|
|
||||||
|
// Check that it worked
|
||||||
|
EXPECT(opt2.has_value());
|
||||||
|
EXPECT(*opt2 == TestOptionalStruct(42));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test for serialization of std::optional<TestOptionalStruct*>
|
||||||
|
TEST(StdOptionalSerialization, SerializTestOptionalStructPointerPointer) {
|
||||||
|
// Create an optional
|
||||||
|
std::optional<TestOptionalStruct*> opt(new TestOptionalStruct(42));
|
||||||
|
|
||||||
|
// Serialize it
|
||||||
|
std::stringstream ss;
|
||||||
|
boost::archive::text_oarchive oa(ss);
|
||||||
|
oa << opt;
|
||||||
|
|
||||||
|
// Deserialize it
|
||||||
|
std::optional<TestOptionalStruct*> opt2;
|
||||||
|
boost::archive::text_iarchive ia(ss);
|
||||||
|
ia >> opt2;
|
||||||
|
|
||||||
|
// Check that it worked
|
||||||
|
EXPECT(opt2.has_value());
|
||||||
|
EXPECT(**opt2 == TestOptionalStruct(42));
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
TestResult tr;
|
TestResult tr;
|
||||||
return TestRegistry::runAllTests(tr);
|
return TestRegistry::runAllTests(tr);
|
||||||
|
|
Loading…
Reference in New Issue