#include #include #include #include #ifdef HAVE_CONFIG_H #include "config.h" #endif #if defined(MSGPACK_USE_BOOST) TEST(MSGPACK_BOOST, pack_convert_nil) { std::stringstream ss; boost::optional val1; msgpack::pack(ss, val1); msgpack::unpacked ret; msgpack::unpack(ret, ss.str().data(), ss.str().size()); boost::optional val2 = ret.get().as >(); EXPECT_TRUE(val1 == val2); } TEST(MSGPACK_BOOST, pack_convert_int) { std::stringstream ss; boost::optional val1 = 1; msgpack::pack(ss, val1); msgpack::unpacked ret; msgpack::unpack(ret, ss.str().data(), ss.str().size()); boost::optional val2 = ret.get().as >(); EXPECT_TRUE(val1 == val2); } TEST(MSGPACK_BOOST, pack_convert_vector) { typedef boost::optional > ovi_t; std::stringstream ss; ovi_t val1; std::vector v; v.push_back(1); v.push_back(2); v.push_back(3); val1 = v; msgpack::pack(ss, val1); msgpack::unpacked ret; msgpack::unpack(ret, ss.str().data(), ss.str().size()); ovi_t val2 = ret.get().as(); EXPECT_TRUE(val1 == val2); } TEST(MSGPACK_BOOST, pack_convert_vector_optional) { typedef std::vector > voi_t; std::stringstream ss; voi_t val1; val1.resize(3); val1[0] = 1; val1[2] = 3; msgpack::pack(ss, val1); msgpack::unpacked ret; msgpack::unpack(ret, ss.str().data(), ss.str().size()); voi_t val2 = ret.get().as(); EXPECT_TRUE(val1 == val2); } TEST(MSGPACK_BOOST, object_nil) { boost::optional val1; msgpack::object obj(val1); boost::optional val2 = obj.as >(); EXPECT_TRUE(val1 == val2); } TEST(MSGPACK_BOOST, object_int) { boost::optional val1 = 1; msgpack::object obj(val1); boost::optional val2 = obj.as >(); EXPECT_TRUE(val1 == val2); } // Compile error as expected /* TEST(MSGPACK_BOOST, object_vector) { typedef boost::optional > ovi_t; ovi_t val1; std::vector v; v.push_back(1); v.push_back(2); v.push_back(3); val1 = v; msgpack::object obj(val1); ovi_t val2 = obj.as(); EXPECT_TRUE(val1 == val2); } */ TEST(MSGPACK_BOOST, object_with_zone_nil) { msgpack::zone z; boost::optional val1; msgpack::object obj(val1, z); boost::optional val2 = obj.as >(); EXPECT_TRUE(val1 == val2); } TEST(MSGPACK_BOOST, object_with_zone_int) { msgpack::zone z; boost::optional val1 = 1; msgpack::object obj(val1, z); boost::optional val2 = obj.as >(); EXPECT_TRUE(val1 == val2); } TEST(MSGPACK_BOOST, object_with_zone_vector_optional) { typedef std::vector > voi_t; msgpack::zone z; voi_t val1; val1.resize(3); val1[0] = 1; val1[2] = 3; msgpack::object obj(val1, z); voi_t val2 = obj.as(); EXPECT_TRUE(val1 == val2); } #endif // defined(MSGPACK_USE_BOOST)