more tests on optional serialization

release/4.3a0
Kartik Arcot 2023-01-21 12:53:59 -08:00
parent e4e43d5d16
commit 3cdbebbf63
2 changed files with 48 additions and 2 deletions

View File

@ -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>

View File

@ -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);