more tests on optional serialization
parent
e4e43d5d16
commit
3cdbebbf63
|
@ -1,6 +1,7 @@
|
|||
// A hack to serialize std::optional<T> to boost::archive
|
||||
// Don't know if it will work. Trying to follow this:
|
||||
// Functionality to serialize std::optional<T> to boost::archive
|
||||
// Following this:
|
||||
// PR: https://github.com/boostorg/serialization/pull/148/files#
|
||||
|
||||
#pragma once
|
||||
#include <optional>
|
||||
#include <boost/config.hpp>
|
||||
|
|
|
@ -60,6 +60,10 @@ public:
|
|||
TestOptionalStruct() = default;
|
||||
TestOptionalStruct(const int& opt)
|
||||
: opt(opt) {}
|
||||
bool operator==(const TestOptionalStruct& other) const {
|
||||
// check the values are equal
|
||||
return *opt == *other.opt;
|
||||
}
|
||||
friend class boost::serialization::access;
|
||||
template <class Archive>
|
||||
void serialize(Archive& ar, const unsigned int /*version*/) {
|
||||
|
@ -104,6 +108,47 @@ TEST(StdOptionalSerialization, SerializTestOptionalStructUninitialized) {
|
|||
EXPECT(serializationTestHelpers::equalsXML(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() {
|
||||
TestResult tr;
|
||||
return TestRegistry::runAllTests(tr);
|
||||
|
|
Loading…
Reference in New Issue