reference_wrapper_cpp11.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include <msgpack.hpp>
  2. #include <sstream>
  3. #include <gtest/gtest.h>
  4. #ifdef HAVE_CONFIG_H
  5. #include "config.h"
  6. #endif
  7. #if !defined(MSGPACK_USE_CPP03)
  8. TEST(MSGPACK_REFERENCE_WRAPPER, pack_convert)
  9. {
  10. int i1 = 42;
  11. std::reference_wrapper<int> val1(i1);
  12. std::stringstream ss;
  13. msgpack::pack(ss, val1);
  14. msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
  15. int i2 = 0;
  16. std::reference_wrapper<int> val2(i2);
  17. oh.get().convert(val2);
  18. EXPECT_EQ(i1, i2);
  19. }
  20. TEST(MSGPACK_REFERENCE_WRAPPER, pack_convert_const)
  21. {
  22. const int i1 = 42;
  23. std::reference_wrapper<const int> val1(i1);
  24. std::stringstream ss;
  25. msgpack::pack(ss, val1);
  26. msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
  27. int i2 = 0;
  28. std::reference_wrapper<int> val2(i2);
  29. oh.get().convert(val2);
  30. EXPECT_EQ(i1, i2);
  31. }
  32. TEST(MSGPACK_REFERENCE_WRAPPER, pack_vector)
  33. {
  34. int i1 = 42;
  35. std::vector<std::reference_wrapper<int>> val1{i1};
  36. std::stringstream ss;
  37. msgpack::pack(ss, val1);
  38. msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
  39. std::vector<int> val2 = oh.get().as<std::vector<int>>();
  40. EXPECT_EQ(val2.size(), static_cast<size_t>(1));
  41. EXPECT_EQ(val1[0], val2[0]);
  42. }
  43. TEST(MSGPACK_REFERENCE_WRAPPER, object)
  44. {
  45. int i1 = 42;
  46. std::reference_wrapper<int> val1(i1);
  47. msgpack::object o(val1);
  48. int i2 = 0;
  49. std::reference_wrapper<int> val2(i2);
  50. o.convert(val2);
  51. EXPECT_EQ(i1, i2);
  52. }
  53. TEST(MSGPACK_REFERENCE_WRAPPER, object_const)
  54. {
  55. const int i1 = 42;
  56. std::reference_wrapper<const int> val1(i1);
  57. msgpack::object o(val1);
  58. int i2 = 0;
  59. std::reference_wrapper<int> val2(i2);
  60. o.convert(val2);
  61. EXPECT_EQ(i1, i2);
  62. }
  63. TEST(MSGPACK_REFERENCE_WRAPPER, object_with_zone)
  64. {
  65. std::string s1 = "ABC";
  66. std::reference_wrapper<std::string> val1(s1);
  67. msgpack::zone z;
  68. msgpack::object o(val1, z);
  69. std::string s2 = "DE";
  70. std::reference_wrapper<std::string> val2(s2);
  71. o.convert(val2);
  72. EXPECT_EQ(s1, s2);
  73. }
  74. TEST(MSGPACK_REFERENCE_WRAPPER, object_with_zone_const)
  75. {
  76. const std::string s1 = "ABC";
  77. std::reference_wrapper<const std::string> val1(s1);
  78. msgpack::zone z;
  79. msgpack::object o(val1, z);
  80. std::string s2 = "DE";
  81. std::reference_wrapper<std::string> val2(s2);
  82. o.convert(val2);
  83. EXPECT_EQ(s1, s2);
  84. }
  85. #endif // !defined(MSGPACK_USE_CPP03)