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