MsgPackWriterTest.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. //===- MsgPackWriterTest.cpp ------------------------------------*- C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "llvm/BinaryFormat/MsgPackWriter.h"
  10. #include "llvm/BinaryFormat/MsgPack.h"
  11. #include "gtest/gtest.h"
  12. using namespace llvm;
  13. using namespace llvm::msgpack;
  14. struct MsgPackWriter : testing::Test {
  15. std::string Buffer;
  16. llvm::raw_string_ostream OStream;
  17. Writer MPWriter;
  18. MsgPackWriter() : OStream(Buffer), MPWriter(OStream) {}
  19. };
  20. TEST_F(MsgPackWriter, TestWriteNil) {
  21. MPWriter.writeNil();
  22. EXPECT_EQ(OStream.str(), "\xc0");
  23. }
  24. TEST_F(MsgPackWriter, TestWriteBool) {
  25. MPWriter.write(true);
  26. MPWriter.write(false);
  27. EXPECT_EQ(OStream.str(), "\xc3\xc2");
  28. }
  29. TEST_F(MsgPackWriter, TestWriteFixPositiveInt) {
  30. // FixPositiveInt form bitpattern starts with 0, so max FixPositiveInt
  31. // is 01111111 = 127
  32. for (uint64_t u = 0; u <= 127; ++u) {
  33. Buffer.clear();
  34. MPWriter.write(u);
  35. std::string Output = OStream.str();
  36. EXPECT_EQ(Output.size(), 1u);
  37. EXPECT_EQ(Output.data()[0], static_cast<uint8_t>(u));
  38. }
  39. }
  40. TEST_F(MsgPackWriter, TestWriteUInt8Min) {
  41. // See TestWriteFixPositiveInt for why 128 is the min non-fix Int8
  42. uint64_t u = 128;
  43. MPWriter.write(u);
  44. EXPECT_EQ(OStream.str(), "\xcc\x80");
  45. }
  46. TEST_F(MsgPackWriter, TestWriteUInt8) {
  47. uint64_t u = 221;
  48. MPWriter.write(u);
  49. EXPECT_EQ(OStream.str(), "\xcc\xdd");
  50. }
  51. TEST_F(MsgPackWriter, TestWriteUInt8Max) {
  52. uint64_t u = UINT8_MAX;
  53. MPWriter.write(u);
  54. EXPECT_EQ(OStream.str(), "\xcc\xff");
  55. }
  56. TEST_F(MsgPackWriter, TestWriteUInt16Min) {
  57. uint64_t u = static_cast<uint64_t>(UINT8_MAX) + 1;
  58. MPWriter.write(u);
  59. EXPECT_EQ(OStream.str(), std::string("\xcd\x01\x00", 3));
  60. }
  61. TEST_F(MsgPackWriter, TestWriteUInt16) {
  62. uint64_t u = 43981;
  63. MPWriter.write(u);
  64. EXPECT_EQ(OStream.str(), "\xcd\xab\xcd");
  65. }
  66. TEST_F(MsgPackWriter, TestWriteUInt16Max) {
  67. uint64_t u = UINT16_MAX;
  68. MPWriter.write(u);
  69. EXPECT_EQ(OStream.str(), "\xcd\xff\xff");
  70. }
  71. TEST_F(MsgPackWriter, TestWriteUInt32Min) {
  72. uint64_t u = static_cast<uint64_t>(UINT16_MAX) + 1;
  73. MPWriter.write(u);
  74. EXPECT_EQ(OStream.str(), std::string("\xce\x00\x01\x00\x00", 5));
  75. }
  76. TEST_F(MsgPackWriter, TestWriteUInt32) {
  77. uint64_t u = 2882400186;
  78. MPWriter.write(u);
  79. EXPECT_EQ(OStream.str(), "\xce\xab\xcd\xef\xba");
  80. }
  81. TEST_F(MsgPackWriter, TestWriteUInt32Max) {
  82. uint64_t u = UINT32_MAX;
  83. MPWriter.write(u);
  84. EXPECT_EQ(OStream.str(), "\xce\xff\xff\xff\xff");
  85. }
  86. TEST_F(MsgPackWriter, TestWriteUInt64Min) {
  87. uint64_t u = static_cast<uint64_t>(UINT32_MAX) + 1;
  88. MPWriter.write(u);
  89. EXPECT_EQ(OStream.str(),
  90. std::string("\xcf\x00\x00\x00\x01\x00\x00\x00\x00", 9));
  91. }
  92. TEST_F(MsgPackWriter, TestWriteUInt64) {
  93. uint64_t u = 0x010203040506074a;
  94. MPWriter.write(u);
  95. EXPECT_EQ(OStream.str(), "\xcf\x01\x02\x03\x04\x05\x06\x07\x4a");
  96. }
  97. TEST_F(MsgPackWriter, TestWriteUInt64Max) {
  98. uint64_t u = UINT64_MAX;
  99. MPWriter.write(u);
  100. EXPECT_EQ(OStream.str(), "\xcf\xff\xff\xff\xff\xff\xff\xff\xff");
  101. }
  102. TEST_F(MsgPackWriter, TestWriteFixNegativeInt) {
  103. // Positive values will be written in a UInt form, so max FixNegativeInt is -1
  104. //
  105. // FixNegativeInt form bitpattern starts with 111, so min FixNegativeInt
  106. // is 11100000 = -32
  107. for (int64_t i = -1; i >= -32; --i) {
  108. Buffer.clear();
  109. MPWriter.write(i);
  110. std::string Output = OStream.str();
  111. EXPECT_EQ(Output.size(), 1u);
  112. EXPECT_EQ(static_cast<int8_t>(Output.data()[0]), static_cast<int8_t>(i));
  113. }
  114. }
  115. TEST_F(MsgPackWriter, TestWriteInt8Max) {
  116. // See TestWriteFixNegativeInt for why -33 is the max non-fix Int8
  117. int64_t i = -33;
  118. MPWriter.write(i);
  119. EXPECT_EQ(OStream.str(), "\xd0\xdf");
  120. }
  121. TEST_F(MsgPackWriter, TestWriteInt8) {
  122. int64_t i = -40;
  123. MPWriter.write(i);
  124. EXPECT_EQ(OStream.str(), "\xd0\xd8");
  125. }
  126. TEST_F(MsgPackWriter, TestWriteInt8Min) {
  127. int64_t i = INT8_MIN;
  128. MPWriter.write(i);
  129. EXPECT_EQ(OStream.str(), "\xd0\x80");
  130. }
  131. TEST_F(MsgPackWriter, TestWriteInt16Max) {
  132. int64_t i = static_cast<int64_t>(INT8_MIN) - 1;
  133. MPWriter.write(i);
  134. EXPECT_EQ(OStream.str(), "\xd1\xff\x7f");
  135. }
  136. TEST_F(MsgPackWriter, TestWriteInt16) {
  137. int64_t i = -4369;
  138. MPWriter.write(i);
  139. EXPECT_EQ(OStream.str(), "\xd1\xee\xef");
  140. }
  141. TEST_F(MsgPackWriter, TestWriteInt16Min) {
  142. int64_t i = INT16_MIN;
  143. MPWriter.write(i);
  144. EXPECT_EQ(OStream.str(), std::string("\xd1\x80\x00", 3));
  145. }
  146. TEST_F(MsgPackWriter, TestWriteInt32Max) {
  147. int64_t i = static_cast<int64_t>(INT16_MIN) - 1;
  148. MPWriter.write(i);
  149. EXPECT_EQ(OStream.str(), "\xd2\xff\xff\x7f\xff");
  150. }
  151. TEST_F(MsgPackWriter, TestWriteInt32) {
  152. int64_t i = -286331153;
  153. MPWriter.write(i);
  154. EXPECT_EQ(OStream.str(), "\xd2\xee\xee\xee\xef");
  155. }
  156. TEST_F(MsgPackWriter, TestWriteInt32Min) {
  157. int64_t i = INT32_MIN;
  158. MPWriter.write(i);
  159. EXPECT_EQ(OStream.str(), std::string("\xd2\x80\x00\x00\x00", 5));
  160. }
  161. TEST_F(MsgPackWriter, TestWriteInt64Max) {
  162. int64_t i = static_cast<int64_t>(INT32_MIN) - 1;
  163. MPWriter.write(i);
  164. EXPECT_EQ(OStream.str(), "\xd3\xff\xff\xff\xff\x7f\xff\xff\xff");
  165. }
  166. TEST_F(MsgPackWriter, TestWriteInt64) {
  167. int64_t i = -1229782938247303441;
  168. MPWriter.write(i);
  169. EXPECT_EQ(OStream.str(), "\xd3\xee\xee\xee\xee\xee\xee\xee\xef");
  170. }
  171. TEST_F(MsgPackWriter, TestWriteInt64Min) {
  172. int64_t i = INT64_MIN;
  173. MPWriter.write(i);
  174. EXPECT_EQ(OStream.str(),
  175. std::string("\xd3\x80\x00\x00\x00\x00\x00\x00\x00", 9));
  176. }
  177. TEST_F(MsgPackWriter, TestWriteFloat32) {
  178. float f = -3.6973142664068907e+28;
  179. MPWriter.write(f);
  180. EXPECT_EQ(OStream.str(), "\xca\xee\xee\xee\xef");
  181. }
  182. TEST_F(MsgPackWriter, TestWriteFloat64) {
  183. double d = -2.2899894549927042e+226;
  184. MPWriter.write(d);
  185. EXPECT_EQ(OStream.str(), "\xcb\xee\xee\xee\xee\xee\xee\xee\xef");
  186. }
  187. TEST_F(MsgPackWriter, TestWriteFixStrMin) {
  188. std::string s;
  189. MPWriter.write(s);
  190. EXPECT_EQ(OStream.str(), "\xa0");
  191. }
  192. TEST_F(MsgPackWriter, TestWriteFixStr) {
  193. std::string s = "foo";
  194. MPWriter.write(s);
  195. EXPECT_EQ(OStream.str(), "\xa3"
  196. "foo");
  197. }
  198. TEST_F(MsgPackWriter, TestWriteFixStrMax) {
  199. // FixStr format's size is a 5 bit unsigned integer, so max is 11111 = 31
  200. std::string s(31, 'a');
  201. MPWriter.write(s);
  202. EXPECT_EQ(OStream.str(), std::string("\xbf") + s);
  203. }
  204. TEST_F(MsgPackWriter, TestWriteStr8Min) {
  205. // See TestWriteFixStrMax for why 32 is the min non-fix Str8
  206. std::string s(32, 'a');
  207. MPWriter.write(s);
  208. EXPECT_EQ(OStream.str(), std::string("\xd9\x20") + s);
  209. }
  210. TEST_F(MsgPackWriter, TestWriteStr8) {
  211. std::string s(33, 'a');
  212. MPWriter.write(s);
  213. EXPECT_EQ(OStream.str(), std::string("\xd9\x21") + s);
  214. }
  215. TEST_F(MsgPackWriter, TestWriteStr8Max) {
  216. std::string s(UINT8_MAX, 'a');
  217. MPWriter.write(s);
  218. EXPECT_EQ(OStream.str(), std::string("\xd9\xff") + s);
  219. }
  220. TEST_F(MsgPackWriter, TestWriteStr16Min) {
  221. std::string s(static_cast<uint64_t>(UINT8_MAX) + 1, 'a');
  222. MPWriter.write(s);
  223. EXPECT_EQ(OStream.str(), std::string("\xda\x01\x00", 3) + s);
  224. }
  225. TEST_F(MsgPackWriter, TestWriteStr16) {
  226. std::string s(511, 'a');
  227. MPWriter.write(s);
  228. EXPECT_EQ(OStream.str(), std::string("\xda\x01\xff") + s);
  229. }
  230. TEST_F(MsgPackWriter, TestWriteStr16Max) {
  231. std::string s(UINT16_MAX, 'a');
  232. MPWriter.write(s);
  233. EXPECT_EQ(OStream.str(), std::string("\xda\xff\xff") + s);
  234. }
  235. TEST_F(MsgPackWriter, TestWriteStr32Min) {
  236. std::string s(static_cast<uint64_t>(UINT16_MAX) + 1, 'a');
  237. MPWriter.write(s);
  238. EXPECT_EQ(OStream.str(), std::string("\xdb\x00\x01\x00\x00", 5) + s);
  239. }
  240. TEST_F(MsgPackWriter, TestWriteStr32) {
  241. std::string s(131071, 'a');
  242. MPWriter.write(s);
  243. EXPECT_EQ(OStream.str(), std::string("\xdb\x00\x01\xff\xff", 5) + s);
  244. }
  245. TEST_F(MsgPackWriter, TestWriteBin8Min) {
  246. std::string s;
  247. MPWriter.write(MemoryBufferRef(s, ""));
  248. EXPECT_EQ(OStream.str(), std::string("\xc4\x00", 2) + s);
  249. }
  250. TEST_F(MsgPackWriter, TestWriteBin8) {
  251. std::string s(5, 'a');
  252. MPWriter.write(MemoryBufferRef(s, ""));
  253. EXPECT_EQ(OStream.str(), std::string("\xc4\x05") + s);
  254. }
  255. TEST_F(MsgPackWriter, TestWriteBin8Max) {
  256. std::string s(UINT8_MAX, 'a');
  257. MPWriter.write(MemoryBufferRef(s, ""));
  258. EXPECT_EQ(OStream.str(), std::string("\xc4\xff") + s);
  259. }
  260. TEST_F(MsgPackWriter, TestWriteBin16Min) {
  261. std::string s(static_cast<uint64_t>(UINT8_MAX) + 1, 'a');
  262. MPWriter.write(MemoryBufferRef(s, ""));
  263. EXPECT_EQ(OStream.str(), std::string("\xc5\x01\x00", 3) + s);
  264. }
  265. TEST_F(MsgPackWriter, TestWriteBin16) {
  266. std::string s(511, 'a');
  267. MPWriter.write(MemoryBufferRef(s, ""));
  268. EXPECT_EQ(OStream.str(), "\xc5\x01\xff" + s);
  269. }
  270. TEST_F(MsgPackWriter, TestWriteBin16Max) {
  271. std::string s(UINT16_MAX, 'a');
  272. MPWriter.write(MemoryBufferRef(s, ""));
  273. EXPECT_EQ(OStream.str(), std::string("\xc5\xff\xff") + s);
  274. }
  275. TEST_F(MsgPackWriter, TestWriteBin32Min) {
  276. std::string s(static_cast<uint64_t>(UINT16_MAX) + 1, 'a');
  277. MPWriter.write(MemoryBufferRef(s, ""));
  278. EXPECT_EQ(OStream.str(), std::string("\xc6\x00\x01\x00\x00", 5) + s);
  279. }
  280. TEST_F(MsgPackWriter, TestWriteBin32) {
  281. std::string s(131071, 'a');
  282. MPWriter.write(MemoryBufferRef(s, ""));
  283. EXPECT_EQ(OStream.str(), std::string("\xc6\x00\x01\xff\xff", 5) + s);
  284. }
  285. TEST_F(MsgPackWriter, TestWriteFixArrayMin) {
  286. MPWriter.writeArraySize(0);
  287. EXPECT_EQ(OStream.str(), "\x90");
  288. }
  289. TEST_F(MsgPackWriter, TestWriteFixArray) {
  290. MPWriter.writeArraySize(4);
  291. EXPECT_EQ(OStream.str(), "\x94");
  292. }
  293. TEST_F(MsgPackWriter, TestWriteFixArrayMax) {
  294. // FixArray format's size is a 4 bit unsigned integer, so max is 1111 = 15
  295. MPWriter.writeArraySize(15);
  296. EXPECT_EQ(OStream.str(), "\x9f");
  297. }
  298. TEST_F(MsgPackWriter, TestWriteArray16Min) {
  299. // See TestWriteFixArrayMax for why 16 is the min non-fix Array16
  300. MPWriter.writeArraySize(16);
  301. EXPECT_EQ(OStream.str(), std::string("\xdc\x00\x10", 3));
  302. }
  303. TEST_F(MsgPackWriter, TestWriteArray16) {
  304. MPWriter.writeArraySize(273);
  305. EXPECT_EQ(OStream.str(), "\xdc\x01\x11");
  306. }
  307. TEST_F(MsgPackWriter, TestWriteArray16Max) {
  308. MPWriter.writeArraySize(UINT16_MAX);
  309. EXPECT_EQ(OStream.str(), "\xdc\xff\xff");
  310. }
  311. TEST_F(MsgPackWriter, TestWriteArray32Min) {
  312. MPWriter.writeArraySize(static_cast<uint64_t>(UINT16_MAX) + 1);
  313. EXPECT_EQ(OStream.str(), std::string("\xdd\x00\x01\x00\x00", 5));
  314. }
  315. TEST_F(MsgPackWriter, TestWriteArray32) {
  316. MPWriter.writeArraySize(131071);
  317. EXPECT_EQ(OStream.str(), std::string("\xdd\x00\x01\xff\xff", 5));
  318. }
  319. TEST_F(MsgPackWriter, TestWriteArray32Max) {
  320. MPWriter.writeArraySize(UINT32_MAX);
  321. EXPECT_EQ(OStream.str(), "\xdd\xff\xff\xff\xff");
  322. }
  323. TEST_F(MsgPackWriter, TestWriteFixMapMin) {
  324. MPWriter.writeMapSize(0);
  325. EXPECT_EQ(OStream.str(), "\x80");
  326. }
  327. TEST_F(MsgPackWriter, TestWriteFixMap) {
  328. MPWriter.writeMapSize(4);
  329. EXPECT_EQ(OStream.str(), "\x84");
  330. }
  331. TEST_F(MsgPackWriter, TestWriteFixMapMax) {
  332. // FixMap format's size is a 4 bit unsigned integer, so max is 1111 = 15
  333. MPWriter.writeMapSize(15);
  334. EXPECT_EQ(OStream.str(), "\x8f");
  335. }
  336. TEST_F(MsgPackWriter, TestWriteMap16Min) {
  337. // See TestWriteFixMapMax for why 16 is the min non-fix Map16
  338. MPWriter.writeMapSize(16);
  339. EXPECT_EQ(OStream.str(), std::string("\xde\x00\x10", 3));
  340. }
  341. TEST_F(MsgPackWriter, TestWriteMap16) {
  342. MPWriter.writeMapSize(273);
  343. EXPECT_EQ(OStream.str(), "\xde\x01\x11");
  344. }
  345. TEST_F(MsgPackWriter, TestWriteMap16Max) {
  346. MPWriter.writeMapSize(UINT16_MAX);
  347. EXPECT_EQ(OStream.str(), "\xde\xff\xff");
  348. }
  349. TEST_F(MsgPackWriter, TestWriteMap32Min) {
  350. MPWriter.writeMapSize(static_cast<uint64_t>(UINT16_MAX) + 1);
  351. EXPECT_EQ(OStream.str(), std::string("\xdf\x00\x01\x00\x00", 5));
  352. }
  353. TEST_F(MsgPackWriter, TestWriteMap32) {
  354. MPWriter.writeMapSize(131071);
  355. EXPECT_EQ(OStream.str(), std::string("\xdf\x00\x01\xff\xff", 5));
  356. }
  357. TEST_F(MsgPackWriter, TestWriteMap32Max) {
  358. MPWriter.writeMapSize(UINT32_MAX);
  359. EXPECT_EQ(OStream.str(), std::string("\xdf\xff\xff\xff\xff", 5));
  360. }
  361. // FixExt formats are only available for these specific lengths: 1, 2, 4, 8, 16
  362. TEST_F(MsgPackWriter, TestWriteFixExt1) {
  363. std::string s(1, 'a');
  364. MPWriter.writeExt(0x01, MemoryBufferRef(s, ""));
  365. EXPECT_EQ(OStream.str(), std::string("\xd4\x01") + s);
  366. }
  367. TEST_F(MsgPackWriter, TestWriteFixExt2) {
  368. std::string s(2, 'a');
  369. MPWriter.writeExt(0x01, MemoryBufferRef(s, ""));
  370. EXPECT_EQ(OStream.str(), std::string("\xd5\x01") + s);
  371. }
  372. TEST_F(MsgPackWriter, TestWriteFixExt4) {
  373. std::string s(4, 'a');
  374. MPWriter.writeExt(0x01, MemoryBufferRef(s, ""));
  375. EXPECT_EQ(OStream.str(), std::string("\xd6\x01") + s);
  376. }
  377. TEST_F(MsgPackWriter, TestWriteFixExt8) {
  378. std::string s(8, 'a');
  379. MPWriter.writeExt(0x01, MemoryBufferRef(s, ""));
  380. EXPECT_EQ(OStream.str(), std::string("\xd7\x01") + s);
  381. }
  382. TEST_F(MsgPackWriter, TestWriteFixExt16) {
  383. std::string s(16, 'a');
  384. MPWriter.writeExt(0x01, MemoryBufferRef(s, ""));
  385. EXPECT_EQ(OStream.str(), std::string("\xd8\x01") + s);
  386. }
  387. TEST_F(MsgPackWriter, TestWriteExt8Min) {
  388. std::string s;
  389. MPWriter.writeExt(0x01, MemoryBufferRef(s, ""));
  390. EXPECT_EQ(OStream.str(), std::string("\xc7\x00\x01", 3) + s);
  391. }
  392. TEST_F(MsgPackWriter, TestWriteExt8) {
  393. std::string s(0x2a, 'a');
  394. MPWriter.writeExt(0x01, MemoryBufferRef(s, ""));
  395. EXPECT_EQ(OStream.str(), std::string("\xc7\x2a\x01") + s);
  396. }
  397. TEST_F(MsgPackWriter, TestWriteExt8Max) {
  398. std::string s(UINT8_MAX, 'a');
  399. MPWriter.writeExt(0x01, MemoryBufferRef(s, ""));
  400. EXPECT_EQ(OStream.str(), std::string("\xc7\xff\x01") + s);
  401. }
  402. TEST_F(MsgPackWriter, TestWriteExt16Min) {
  403. std::string s(static_cast<uint16_t>(UINT8_MAX) + 1, 'a');
  404. MPWriter.writeExt(0x02, MemoryBufferRef(s, ""));
  405. EXPECT_EQ(OStream.str(), std::string("\xc8\x01\x00\x02", 4) + s);
  406. }
  407. TEST_F(MsgPackWriter, TestWriteExt16) {
  408. std::string s(273, 'a');
  409. MPWriter.writeExt(0x01, MemoryBufferRef(s, ""));
  410. EXPECT_EQ(OStream.str(), std::string("\xc8\x01\x11\x01") + s);
  411. }
  412. TEST_F(MsgPackWriter, TestWriteExt16Max) {
  413. std::string s(UINT16_MAX, 'a');
  414. MPWriter.writeExt(0x01, MemoryBufferRef(s, ""));
  415. EXPECT_EQ(OStream.str(), std::string("\xc8\xff\xff\x01") + s);
  416. }
  417. TEST_F(MsgPackWriter, TestWriteExt32Min) {
  418. std::string s(static_cast<uint32_t>(UINT16_MAX) + 1, 'a');
  419. MPWriter.writeExt(0x02, MemoryBufferRef(s, ""));
  420. EXPECT_EQ(OStream.str(), std::string("\xc9\x00\x01\x00\x00\x02", 6) + s);
  421. }
  422. TEST_F(MsgPackWriter, TestWriteCompatibleNoStr8) {
  423. Writer CompatWriter(OStream, true);
  424. std::string s(32, 'a');
  425. CompatWriter.write(s);
  426. EXPECT_EQ(OStream.str(), std::string("\xda\x00\x20", 3) + s);
  427. }
  428. TEST_F(MsgPackWriter, TestWriteCompatibleNoBin) {
  429. Writer CompatWriter(OStream, true);
  430. std::string s;
  431. #ifdef GTEST_HAS_DEATH_TEST
  432. #ifndef NDEBUG
  433. EXPECT_DEATH(CompatWriter.write(MemoryBufferRef(s, "")), "compatible mode");
  434. #endif
  435. #endif
  436. }