Skip to content

Commit 530561e

Browse files
committed
Added tests for msgpack::object::clone().
Converting C++ types from cloned object after original zone is destroyed.
1 parent aec88c0 commit 530561e

File tree

1 file changed

+71
-45
lines changed

1 file changed

+71
-45
lines changed

test/object.cpp

Lines changed: 71 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -361,67 +361,93 @@ TEST(object, clone_int)
361361

362362
TEST(object, clone_str)
363363
{
364-
msgpack::zone z;
364+
msgpack::object_handle oh;
365365
std::string v = "123456789";
366-
msgpack::object obj(v, z);
367-
std::size_t sz1 = msgpack::aligned_zone_size(obj);
368-
msgpack::object_handle h = msgpack::clone(obj);
369-
EXPECT_EQ(h.get(), obj);
370-
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
371-
h = msgpack::clone(obj);
372-
EXPECT_EQ(h.get(), obj);
373-
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
366+
{
367+
msgpack::zone z;
368+
msgpack::object obj(v, z);
369+
std::size_t sz1 = msgpack::aligned_zone_size(obj);
370+
msgpack::object_handle h = msgpack::clone(obj);
371+
EXPECT_EQ(h.get(), obj);
372+
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
373+
h = msgpack::clone(obj);
374+
EXPECT_EQ(h.get(), obj);
375+
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
376+
oh = msgpack::move(h);
377+
}
378+
EXPECT_EQ(v, oh.get().as<std::string>());
374379
}
375380

376381
TEST(object, clone_bin)
377382
{
378-
msgpack::zone z;
383+
msgpack::object_handle oh;
379384
std::vector<char> v;
380-
v.push_back('A');
381-
v.push_back('B');
382-
v.push_back('C');
383-
msgpack::object obj(v, z);
384-
std::size_t sz1 = msgpack::aligned_zone_size(obj);
385-
msgpack::object_handle h = msgpack::clone(obj);
386-
EXPECT_EQ(h.get(), obj);
387-
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
388-
h = msgpack::clone(obj);
389-
EXPECT_EQ(h.get(), obj);
390-
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
385+
{
386+
msgpack::zone z;
387+
v.push_back('A');
388+
v.push_back('B');
389+
v.push_back('C');
390+
msgpack::object obj(v, z);
391+
std::size_t sz1 = msgpack::aligned_zone_size(obj);
392+
msgpack::object_handle h = msgpack::clone(obj);
393+
EXPECT_EQ(h.get(), obj);
394+
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
395+
h = msgpack::clone(obj);
396+
EXPECT_EQ(h.get(), obj);
397+
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
398+
oh = msgpack::move(h);
399+
}
400+
std::vector<char> v2 = oh.get().as<std::vector<char> >();
401+
EXPECT_EQ(v.size(), v2.size());
402+
EXPECT_TRUE(equal(v.begin(), v.end(), v2.begin()));
391403
}
392404

393405
TEST(object, clone_array)
394406
{
395-
msgpack::zone z;
407+
msgpack::object_handle oh;
396408
std::vector<int> v;
397-
v.push_back(1);
398-
v.push_back(2);
399-
v.push_back(3);
400-
msgpack::object obj(v, z);
401-
std::size_t sz1 = msgpack::aligned_zone_size(obj);
402-
msgpack::object_handle h = msgpack::clone(obj);
403-
EXPECT_EQ(h.get(), obj);
404-
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
405-
h = msgpack::clone(obj);
406-
EXPECT_EQ(h.get(), obj);
407-
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
409+
{
410+
msgpack::zone z;
411+
v.push_back(1);
412+
v.push_back(2);
413+
v.push_back(3);
414+
msgpack::object obj(v, z);
415+
std::size_t sz1 = msgpack::aligned_zone_size(obj);
416+
msgpack::object_handle h = msgpack::clone(obj);
417+
EXPECT_EQ(h.get(), obj);
418+
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
419+
h = msgpack::clone(obj);
420+
EXPECT_EQ(h.get(), obj);
421+
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
422+
oh = msgpack::move(h);
423+
}
424+
std::vector<int> v2 = oh.get().as<std::vector<int> >();
425+
EXPECT_EQ(v.size(), v2.size());
426+
EXPECT_TRUE(equal(v.begin(), v.end(), v2.begin()));
408427
}
409428

410429
TEST(object, clone_map)
411430
{
412-
msgpack::zone z;
431+
msgpack::object_handle oh;
413432
std::map<int, std::string> v;
414-
v.insert(std::map<int, std::string>::value_type(1, "ABC"));
415-
v.insert(std::map<int, std::string>::value_type(2, "DEF"));
416-
v.insert(std::map<int, std::string>::value_type(3, "GHI"));
417-
msgpack::object obj(v, z);
418-
std::size_t sz1 = msgpack::aligned_zone_size(obj);
419-
msgpack::object_handle h = msgpack::clone(obj);
420-
EXPECT_EQ(h.get(), obj);
421-
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
422-
h = msgpack::clone(obj);
423-
EXPECT_EQ(h.get(), obj);
424-
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
433+
{
434+
msgpack::zone z;
435+
v.insert(std::map<int, std::string>::value_type(1, "ABC"));
436+
v.insert(std::map<int, std::string>::value_type(2, "DEF"));
437+
v.insert(std::map<int, std::string>::value_type(3, "GHI"));
438+
msgpack::object obj(v, z);
439+
std::size_t sz1 = msgpack::aligned_zone_size(obj);
440+
msgpack::object_handle h = msgpack::clone(obj);
441+
EXPECT_EQ(h.get(), obj);
442+
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
443+
h = msgpack::clone(obj);
444+
EXPECT_EQ(h.get(), obj);
445+
EXPECT_EQ(sz1, msgpack::aligned_zone_size(h.get()));
446+
oh = msgpack::move(h);
447+
}
448+
std::map<int, std::string> v2 = oh.get().as<std::map<int, std::string> >();
449+
EXPECT_EQ(v.size(), v2.size());
450+
EXPECT_TRUE(equal(v.begin(), v.end(), v2.begin()));
425451
}
426452

427453
TEST(object, pack_float)

0 commit comments

Comments
 (0)