Add tuple serialization
Reviewers: mferencevic Reviewed By: mferencevic Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D1337
This commit is contained in:
parent
eb30ecb6a0
commit
5f53a7a759
@ -10,6 +10,24 @@
|
||||
|
||||
namespace boost::serialization {
|
||||
|
||||
namespace {
|
||||
|
||||
template <size_t idx, class TArchive, class... Elements>
|
||||
void tuple_serialization_helper(TArchive &ar, std::tuple<Elements...> &tup) {
|
||||
if constexpr (idx < sizeof...(Elements)) {
|
||||
ar &std::get<idx>(tup);
|
||||
tuple_serialization_helper<idx + 1, TArchive, Elements...>(ar, tup);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
template <class TArchive, class... Elements>
|
||||
inline void serialize(TArchive &ar, std::tuple<Elements...> &tup,
|
||||
unsigned int) {
|
||||
tuple_serialization_helper<0, TArchive, Elements...>(ar, tup);
|
||||
}
|
||||
|
||||
template <class TArchive, class T>
|
||||
inline void serialize(TArchive &ar, std::experimental::optional<T> &opt,
|
||||
unsigned int version) {
|
||||
@ -38,7 +56,7 @@ void load(TArchive &ar, std::experimental::optional<T> &opt, unsigned int) {
|
||||
}
|
||||
}
|
||||
|
||||
} // boost::serialization
|
||||
} // namespace boost::serialization
|
||||
|
||||
namespace utils {
|
||||
|
||||
|
64
tests/unit/serialization.cpp
Normal file
64
tests/unit/serialization.cpp
Normal file
@ -0,0 +1,64 @@
|
||||
#include <experimental/optional>
|
||||
#include <sstream>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "boost/archive/binary_iarchive.hpp"
|
||||
#include "boost/archive/binary_oarchive.hpp"
|
||||
#include "utils/serialization.hpp"
|
||||
|
||||
using std::experimental::optional;
|
||||
using std::string_literals::operator""s;
|
||||
|
||||
TEST(Serialization, Optional) {
|
||||
std::stringstream ss;
|
||||
|
||||
optional<int> x1 = {};
|
||||
optional<int> x2 = 42;
|
||||
optional<int> y1, y2;
|
||||
|
||||
{
|
||||
boost::archive::binary_oarchive ar(ss);
|
||||
ar << x1;
|
||||
ar << x2;
|
||||
}
|
||||
|
||||
{
|
||||
boost::archive::binary_iarchive ar(ss);
|
||||
ar >> y1;
|
||||
ar >> y2;
|
||||
}
|
||||
|
||||
EXPECT_EQ(x1, y1);
|
||||
EXPECT_EQ(x2, y2);
|
||||
}
|
||||
|
||||
TEST(Serialization, Tuple) {
|
||||
std::stringstream ss;
|
||||
|
||||
auto x1 = std::make_tuple("foo"s, 42, std::experimental::make_optional(3.14));
|
||||
auto x2 = std::make_tuple();
|
||||
auto x3 = std::make_tuple(1, 2, 3, 4, 5);
|
||||
|
||||
decltype(x1) y1;
|
||||
decltype(x2) y2;
|
||||
decltype(x3) y3;
|
||||
|
||||
{
|
||||
boost::archive::binary_oarchive ar(ss);
|
||||
ar << x1;
|
||||
ar << x2;
|
||||
ar << x3;
|
||||
}
|
||||
|
||||
{
|
||||
boost::archive::binary_iarchive ar(ss);
|
||||
ar >> y1;
|
||||
ar >> y2;
|
||||
ar >> y3;
|
||||
}
|
||||
|
||||
EXPECT_EQ(x1, y1);
|
||||
EXPECT_EQ(x2, y2);
|
||||
EXPECT_EQ(x3, y3);
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
#include <experimental/optional>
|
||||
#include <sstream>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "boost/archive/binary_iarchive.hpp"
|
||||
#include "boost/archive/binary_oarchive.hpp"
|
||||
#include "utils/serialization.hpp"
|
||||
|
||||
using std::experimental::optional;
|
||||
|
||||
TEST(SerializationOptionalTest, SerializeAndDeserialize) {
|
||||
std::stringstream ss;
|
||||
|
||||
optional<int> x1 = {};
|
||||
optional<int> x2 = 42;
|
||||
optional<int> y1, y2;
|
||||
|
||||
{
|
||||
boost::archive::binary_oarchive ar(ss);
|
||||
ar << x1;
|
||||
ar << x2;
|
||||
}
|
||||
|
||||
{
|
||||
boost::archive::binary_iarchive ar(ss);
|
||||
ar >> y1;
|
||||
ar >> y2;
|
||||
}
|
||||
|
||||
EXPECT_EQ(x1, y1);
|
||||
EXPECT_EQ(x2, y2);
|
||||
}
|
Loading…
Reference in New Issue
Block a user