raw.cpp 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. #include <msgpack.hpp>
  2. #include <string>
  3. #include <sstream>
  4. #include <gtest/gtest.h>
  5. #ifdef HAVE_CONFIG_H
  6. #include "config.h"
  7. #endif
  8. TEST(MSGPACK_RAW_REF, pack_unpack)
  9. {
  10. std::string s = "ABC";
  11. msgpack::type::raw_ref rr1(s.data(), s.size());
  12. std::stringstream ss;
  13. msgpack::pack(ss, rr1);
  14. std::string packed_str = ss.str();
  15. EXPECT_EQ(packed_str[0], static_cast<char>(0xc4u));
  16. EXPECT_EQ(packed_str[1], static_cast<char>(0x03u));
  17. EXPECT_EQ(packed_str[2], 'A');
  18. EXPECT_EQ(packed_str[3], 'B');
  19. EXPECT_EQ(packed_str[4], 'C');
  20. msgpack::object_handle oh =
  21. msgpack::unpack(ss.str().data(), ss.str().size());
  22. msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
  23. EXPECT_TRUE(rr1 == rr2);
  24. }
  25. TEST(MSGPACK_RAW_REF, pack_unpack_8_l)
  26. {
  27. std::string s;
  28. msgpack::type::raw_ref rr1(s.data(), s.size());
  29. std::stringstream ss;
  30. msgpack::pack(ss, rr1);
  31. std::string packed_str = ss.str();
  32. EXPECT_EQ(packed_str[0], static_cast<char>(0xc4u));
  33. EXPECT_EQ(packed_str[1], static_cast<char>(0x00u));
  34. msgpack::object_handle oh =
  35. msgpack::unpack(ss.str().data(), ss.str().size());
  36. msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
  37. EXPECT_TRUE(rr1 == rr2);
  38. }
  39. TEST(MSGPACK_RAW_REF, pack_unpack_8_h)
  40. {
  41. std::string s(0xff, 'A');
  42. msgpack::type::raw_ref rr1(s.data(), s.size());
  43. std::stringstream ss;
  44. msgpack::pack(ss, rr1);
  45. std::string packed_str = ss.str();
  46. EXPECT_EQ(packed_str[0], static_cast<char>(0xc4u));
  47. EXPECT_EQ(packed_str[1], static_cast<char>(0xffu));
  48. EXPECT_EQ(packed_str[2], 'A');
  49. msgpack::object_handle oh =
  50. msgpack::unpack(ss.str().data(), ss.str().size());
  51. msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
  52. EXPECT_TRUE(rr1 == rr2);
  53. }
  54. TEST(MSGPACK_RAW_REF, pack_unpack_16_l)
  55. {
  56. std::string s(0xff+1, 'A');
  57. msgpack::type::raw_ref rr1(s.data(), s.size());
  58. std::stringstream ss;
  59. msgpack::pack(ss, rr1);
  60. std::string packed_str = ss.str();
  61. EXPECT_EQ(packed_str[0], static_cast<char>(0xc5u));
  62. EXPECT_EQ(packed_str[1], static_cast<char>(0x01));
  63. EXPECT_EQ(packed_str[2], static_cast<char>(0x00));
  64. EXPECT_EQ(packed_str[3], 'A');
  65. msgpack::object_handle oh =
  66. msgpack::unpack(ss.str().data(), ss.str().size());
  67. msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
  68. EXPECT_TRUE(rr1 == rr2);
  69. }
  70. TEST(MSGPACK_RAW_REF, pack_unpack_16_h)
  71. {
  72. std::string s(0xffff, 'A');
  73. msgpack::type::raw_ref rr1(s.data(), s.size());
  74. std::stringstream ss;
  75. msgpack::pack(ss, rr1);
  76. std::string packed_str = ss.str();
  77. EXPECT_EQ(packed_str[0], static_cast<char>(0xc5u));
  78. EXPECT_EQ(packed_str[1], static_cast<char>(0xffu));
  79. EXPECT_EQ(packed_str[2], static_cast<char>(0xffu));
  80. EXPECT_EQ(packed_str[3], 'A');
  81. msgpack::object_handle oh =
  82. msgpack::unpack(ss.str().data(), ss.str().size());
  83. msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
  84. EXPECT_TRUE(rr1 == rr2);
  85. }
  86. TEST(MSGPACK_RAW_REF, pack_unpack_32_l)
  87. {
  88. std::string s(0xffff+1, 'A');
  89. msgpack::type::raw_ref rr1(s.data(), s.size());
  90. std::stringstream ss;
  91. msgpack::pack(ss, rr1);
  92. std::string packed_str = ss.str();
  93. EXPECT_EQ(packed_str[0], static_cast<char>(0xc6u));
  94. EXPECT_EQ(packed_str[1], static_cast<char>(0x00));
  95. EXPECT_EQ(packed_str[2], static_cast<char>(0x01));
  96. EXPECT_EQ(packed_str[3], static_cast<char>(0x00));
  97. EXPECT_EQ(packed_str[4], static_cast<char>(0x00));
  98. EXPECT_EQ(packed_str[5], 'A');
  99. msgpack::object_handle oh =
  100. msgpack::unpack(ss.str().data(), ss.str().size());
  101. msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
  102. EXPECT_TRUE(rr1 == rr2);
  103. }
  104. TEST(MSGPACK_V4RAW_REF, pack_unpack)
  105. {
  106. std::string s = "ABC";
  107. msgpack::type::v4raw_ref rr1(s.data(), s.size());
  108. std::stringstream ss;
  109. msgpack::pack(ss, rr1);
  110. std::string packed_str = ss.str();
  111. EXPECT_EQ(packed_str[0], static_cast<char>(0xa3u));
  112. EXPECT_EQ(packed_str[1], 'A');
  113. EXPECT_EQ(packed_str[2], 'B');
  114. EXPECT_EQ(packed_str[3], 'C');
  115. msgpack::object_handle oh =
  116. msgpack::unpack(ss.str().data(), ss.str().size());
  117. msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
  118. EXPECT_TRUE(rr1 == rr2);
  119. }
  120. TEST(MSGPACK_V4RAW_REF, pack_unpack_fix_l)
  121. {
  122. std::string s;
  123. msgpack::type::v4raw_ref rr1(s.data(), s.size());
  124. std::stringstream ss;
  125. msgpack::pack(ss, rr1);
  126. std::string packed_str = ss.str();
  127. EXPECT_EQ(packed_str[0], static_cast<char>(0xa0u));
  128. msgpack::object_handle oh =
  129. msgpack::unpack(ss.str().data(), ss.str().size());
  130. msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
  131. EXPECT_TRUE(rr1 == rr2);
  132. }
  133. TEST(MSGPACK_V4RAW_REF, pack_unpack_fix_h)
  134. {
  135. std::string s(0x1f, 'A');
  136. msgpack::type::v4raw_ref rr1(s.data(), s.size());
  137. std::stringstream ss;
  138. msgpack::pack(ss, rr1);
  139. std::string packed_str = ss.str();
  140. EXPECT_EQ(packed_str[0], static_cast<char>(0xbfu));
  141. EXPECT_EQ(packed_str[1], 'A');
  142. msgpack::object_handle oh =
  143. msgpack::unpack(ss.str().data(), ss.str().size());
  144. msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
  145. EXPECT_TRUE(rr1 == rr2);
  146. }
  147. TEST(MSGPACK_V4RAW_REF, pack_unpack_16_l)
  148. {
  149. std::string s(0x1f+1, 'A');
  150. msgpack::type::v4raw_ref rr1(s.data(), s.size());
  151. std::stringstream ss;
  152. msgpack::pack(ss, rr1);
  153. std::string packed_str = ss.str();
  154. EXPECT_EQ(packed_str[0], static_cast<char>(0xdau));
  155. EXPECT_EQ(packed_str[1], static_cast<char>(0x00u));
  156. EXPECT_EQ(packed_str[2], static_cast<char>(0x20u));
  157. EXPECT_EQ(packed_str[3], 'A');
  158. msgpack::object_handle oh =
  159. msgpack::unpack(ss.str().data(), ss.str().size());
  160. msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
  161. EXPECT_TRUE(rr1 == rr2);
  162. }
  163. TEST(MSGPACK_V4RAW_REF, pack_unpack_16_h)
  164. {
  165. std::string s(0xffff, 'A');
  166. msgpack::type::v4raw_ref rr1(s.data(), s.size());
  167. std::stringstream ss;
  168. msgpack::pack(ss, rr1);
  169. std::string packed_str = ss.str();
  170. EXPECT_EQ(packed_str[0], static_cast<char>(0xdau));
  171. EXPECT_EQ(packed_str[1], static_cast<char>(0xffu));
  172. EXPECT_EQ(packed_str[2], static_cast<char>(0xffu));
  173. EXPECT_EQ(packed_str[3], 'A');
  174. msgpack::object_handle oh =
  175. msgpack::unpack(ss.str().data(), ss.str().size());
  176. msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
  177. EXPECT_TRUE(rr1 == rr2);
  178. }
  179. TEST(MSGPACK_V4RAW_REF, pack_unpack_32_l)
  180. {
  181. std::string s(0xffff+1, 'A');
  182. msgpack::type::v4raw_ref rr1(s.data(), s.size());
  183. std::stringstream ss;
  184. msgpack::pack(ss, rr1);
  185. std::string packed_str = ss.str();
  186. EXPECT_EQ(packed_str[0], static_cast<char>(0xdbu));
  187. EXPECT_EQ(packed_str[1], static_cast<char>(0x00));
  188. EXPECT_EQ(packed_str[2], static_cast<char>(0x01));
  189. EXPECT_EQ(packed_str[3], static_cast<char>(0x00));
  190. EXPECT_EQ(packed_str[4], static_cast<char>(0x00));
  191. EXPECT_EQ(packed_str[5], 'A');
  192. msgpack::object_handle oh =
  193. msgpack::unpack(ss.str().data(), ss.str().size());
  194. msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
  195. EXPECT_TRUE(rr1 == rr2);
  196. }