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 12TEST(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::unpacked upd; 27 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 28 msgpack::type::raw_ref rr2 = upd.get().as<msgpack::type::raw_ref>(); 29 EXPECT_TRUE(rr1 == rr2); 30} 31 32TEST(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::unpacked upd; 44 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 45 msgpack::type::raw_ref rr2 = upd.get().as<msgpack::type::raw_ref>(); 46 EXPECT_TRUE(rr1 == rr2); 47} 48 49TEST(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::unpacked upd; 62 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 63 msgpack::type::raw_ref rr2 = upd.get().as<msgpack::type::raw_ref>(); 64 EXPECT_TRUE(rr1 == rr2); 65} 66 67TEST(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::unpacked upd; 81 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 82 msgpack::type::raw_ref rr2 = upd.get().as<msgpack::type::raw_ref>(); 83 EXPECT_TRUE(rr1 == rr2); 84} 85 86TEST(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::unpacked upd; 100 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 101 msgpack::type::raw_ref rr2 = upd.get().as<msgpack::type::raw_ref>(); 102 EXPECT_TRUE(rr1 == rr2); 103} 104 105TEST(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::unpacked upd; 121 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 122 msgpack::type::raw_ref rr2 = upd.get().as<msgpack::type::raw_ref>(); 123 EXPECT_TRUE(rr1 == rr2); 124} 125 126TEST(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::unpacked upd; 140 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 141 msgpack::type::v4raw_ref rr2 = upd.get().as<msgpack::type::v4raw_ref>(); 142 EXPECT_TRUE(rr1 == rr2); 143} 144 145TEST(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::unpacked upd; 156 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 157 msgpack::type::v4raw_ref rr2 = upd.get().as<msgpack::type::v4raw_ref>(); 158 EXPECT_TRUE(rr1 == rr2); 159} 160 161TEST(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::unpacked upd; 173 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 174 msgpack::type::v4raw_ref rr2 = upd.get().as<msgpack::type::v4raw_ref>(); 175 EXPECT_TRUE(rr1 == rr2); 176} 177 178TEST(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::unpacked upd; 192 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 193 msgpack::type::v4raw_ref rr2 = upd.get().as<msgpack::type::v4raw_ref>(); 194 EXPECT_TRUE(rr1 == rr2); 195} 196 197TEST(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::unpacked upd; 211 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 212 msgpack::type::v4raw_ref rr2 = upd.get().as<msgpack::type::v4raw_ref>(); 213 EXPECT_TRUE(rr1 == rr2); 214} 215 216TEST(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::unpacked upd; 232 msgpack::unpack(upd, ss.str().data(), ss.str().size()); 233 msgpack::type::v4raw_ref rr2 = upd.get().as<msgpack::type::v4raw_ref>(); 234 EXPECT_TRUE(rr1 == rr2); 235} 236