mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-13 22:50:19 +02:00
Merge pull request #288 from redboltz/work/add_deep_copy
Added a clone function for msgpack::object.
This commit is contained in:
@@ -340,3 +340,81 @@ TEST(object, construct_class_enum_outer)
|
||||
}
|
||||
|
||||
#endif // !defined(MSGPACK_USE_CPP03)
|
||||
|
||||
TEST(object, clone_int)
|
||||
{
|
||||
int v = 0;
|
||||
msgpack::object obj(v);
|
||||
std::size_t sz1 = msgpack::aligned_zone_size(obj);
|
||||
msgpack::object_handle h = msgpack::clone(obj);
|
||||
EXPECT_EQ(h.get(), obj);
|
||||
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
|
||||
h = msgpack::clone(obj);
|
||||
EXPECT_EQ(h.get(), obj);
|
||||
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
|
||||
}
|
||||
|
||||
TEST(object, clone_str)
|
||||
{
|
||||
msgpack::zone z;
|
||||
std::string v = "123456789";
|
||||
msgpack::object obj(v, z);
|
||||
std::size_t sz1 = msgpack::aligned_zone_size(obj);
|
||||
msgpack::object_handle h = msgpack::clone(obj);
|
||||
EXPECT_EQ(h.get(), obj);
|
||||
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
|
||||
h = msgpack::clone(obj);
|
||||
EXPECT_EQ(h.get(), obj);
|
||||
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
|
||||
}
|
||||
|
||||
TEST(object, clone_bin)
|
||||
{
|
||||
msgpack::zone z;
|
||||
std::vector<char> v;
|
||||
v.push_back('A');
|
||||
v.push_back('B');
|
||||
v.push_back('C');
|
||||
msgpack::object obj(v, z);
|
||||
std::size_t sz1 = msgpack::aligned_zone_size(obj);
|
||||
msgpack::object_handle h = msgpack::clone(obj);
|
||||
EXPECT_EQ(h.get(), obj);
|
||||
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
|
||||
h = msgpack::clone(obj);
|
||||
EXPECT_EQ(h.get(), obj);
|
||||
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
|
||||
}
|
||||
|
||||
TEST(object, clone_array)
|
||||
{
|
||||
msgpack::zone z;
|
||||
std::vector<int> v;
|
||||
v.push_back(1);
|
||||
v.push_back(2);
|
||||
v.push_back(3);
|
||||
msgpack::object obj(v, z);
|
||||
std::size_t sz1 = msgpack::aligned_zone_size(obj);
|
||||
msgpack::object_handle h = msgpack::clone(obj);
|
||||
EXPECT_EQ(h.get(), obj);
|
||||
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
|
||||
h = msgpack::clone(obj);
|
||||
EXPECT_EQ(h.get(), obj);
|
||||
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
|
||||
}
|
||||
|
||||
TEST(object, clone_map)
|
||||
{
|
||||
msgpack::zone z;
|
||||
std::map<int, std::string> v;
|
||||
v.insert(std::map<int, std::string>::value_type(1, "ABC"));
|
||||
v.insert(std::map<int, std::string>::value_type(2, "DEF"));
|
||||
v.insert(std::map<int, std::string>::value_type(3, "GHI"));
|
||||
msgpack::object obj(v, z);
|
||||
std::size_t sz1 = msgpack::aligned_zone_size(obj);
|
||||
msgpack::object_handle h = msgpack::clone(obj);
|
||||
EXPECT_EQ(h.get(), obj);
|
||||
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
|
||||
h = msgpack::clone(obj);
|
||||
EXPECT_EQ(h.get(), obj);
|
||||
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
|
||||
}
|
||||
|
@@ -50,8 +50,6 @@ TEST(pack, myclass)
|
||||
}
|
||||
|
||||
|
||||
#if !defined(MSGPACK_USE_CPP03)
|
||||
|
||||
TEST(unpack, int_ret_no_offset_no_ref)
|
||||
{
|
||||
msgpack::sbuffer sbuf;
|
||||
@@ -97,8 +95,6 @@ TEST(unpack, int_ret_offset_ref)
|
||||
EXPECT_EQ(off, sbuf.size());
|
||||
}
|
||||
|
||||
#endif // !defined(MSGPACK_USE_CPP03)
|
||||
|
||||
|
||||
TEST(unpack, int_no_offset_no_ref)
|
||||
{
|
||||
@@ -290,3 +286,34 @@ TEST(unpack, sequence)
|
||||
|
||||
EXPECT_EQ(off, sbuf.size());
|
||||
}
|
||||
|
||||
|
||||
TEST(unpack, convert_to_object_handle)
|
||||
{
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, 1);
|
||||
msgpack::unpacked msg;
|
||||
|
||||
msgpack::unpack(msg, sbuf.data(), sbuf.size());
|
||||
msgpack::object_handle oh(msgpack::move(msg));
|
||||
EXPECT_EQ(1, oh.get().as<int>());
|
||||
|
||||
}
|
||||
|
||||
TEST(unpack, convert_to_object_handle_direct)
|
||||
{
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, 1);
|
||||
msgpack::object_handle oh(msgpack::unpack(sbuf.data(), sbuf.size()));
|
||||
EXPECT_EQ(1, oh.get().as<int>());
|
||||
|
||||
}
|
||||
|
||||
TEST(unpack, convert_to_object_handle_direct_implicit)
|
||||
{
|
||||
msgpack::sbuffer sbuf;
|
||||
msgpack::pack(sbuf, 1);
|
||||
msgpack::object_handle oh = msgpack::unpack(sbuf.data(), sbuf.size());
|
||||
EXPECT_EQ(1, oh.get().as<int>());
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user