hex_to_text_test.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. // Copyright (c) 2024 Google LLC.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #include <vector>
  15. #include "gmock/gmock.h"
  16. #include "test/test_fixture.h"
  17. #include "tools/io.h"
  18. namespace spvtools {
  19. namespace {
  20. using spvtest::ScopedContext;
  21. class HexToText : public ::testing::Test {
  22. public:
  23. void VerifyDisassembly(const char* hex_stream,
  24. const char* expected_disassembly) {
  25. std::vector<char> stream(hex_stream, hex_stream + strlen(hex_stream));
  26. std::vector<uint32_t> binary;
  27. // Convert hext to binary first.
  28. EXPECT_TRUE(ConvertHexToBinary(stream, &binary));
  29. // Then disassemble it.
  30. spv_diagnostic diagnostic = nullptr;
  31. spv_text disassembly = nullptr;
  32. EXPECT_EQ(spvBinaryToText(ScopedContext().context, binary.data(),
  33. binary.size(), SPV_BINARY_TO_TEXT_OPTION_NONE,
  34. &disassembly, &diagnostic),
  35. SPV_SUCCESS);
  36. EXPECT_EQ(diagnostic, nullptr);
  37. // Verify disassembly is as expected and clean up.
  38. EXPECT_STREQ(disassembly->str, expected_disassembly);
  39. spvDiagnosticDestroy(diagnostic);
  40. spvTextDestroy(disassembly);
  41. }
  42. void EnsureError(const char* hex_stream) {
  43. std::vector<char> stream(hex_stream, hex_stream + strlen(hex_stream));
  44. std::vector<uint32_t> binary;
  45. // Make sure there is a parse error
  46. EXPECT_FALSE(ConvertHexToBinary(stream, &binary));
  47. }
  48. };
  49. // The actual assembly doesn't matter, just the hex parsing. All the tests use
  50. // the following SPIR-V.
  51. constexpr char kDisassembly[] = R"(; SPIR-V
  52. ; Version: 1.6
  53. ; Generator: Khronos SPIR-V Tools Assembler; 0
  54. ; Bound: 11
  55. ; Schema: 0
  56. OpCapability Shader
  57. OpMemoryModel Logical GLSL450
  58. OpEntryPoint Vertex %1 "main" %2 %3
  59. OpName %2 "fancy_attribute"
  60. OpName %3 "useful_output"
  61. OpDecorate %2 Location 4
  62. OpDecorate %3 Location 2
  63. %4 = OpTypeFloat 32
  64. %5 = OpTypePointer Input %4
  65. %2 = OpVariable %5 Input
  66. %6 = OpTypePointer Output %4
  67. %3 = OpVariable %6 Output
  68. %7 = OpTypeVoid
  69. %8 = OpTypeFunction %7
  70. %1 = OpFunction %7 None %8
  71. %9 = OpLabel
  72. %10 = OpLoad %4 %2
  73. OpStore %3 %10
  74. OpReturn
  75. OpFunctionEnd
  76. )";
  77. TEST_F(HexToText, Words) {
  78. constexpr char kHex[] = R"(0x07230203, 0x00010600, 0x00070000, 0x0000000b
  79. 0x00000000, 0x00020011, 0x00000001, 0x0003000e
  80. 0x00000000, 0x00000001, 0x0007000f, 0x00000000
  81. 0x00000001, 0x6e69616d, 0x00000000, 0x00000002
  82. 0x00000003, 0x00060005, 0x00000002, 0x636e6166
  83. 0x74615f79, 0x62697274, 0x00657475, 0x00060005
  84. 0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
  85. 0x00000074, 0x00040047, 0x00000002, 0x0000001e
  86. 0x00000004, 0x00040047, 0x00000003, 0x0000001e
  87. 0x00000002, 0x00030016, 0x00000004, 0x00000020
  88. 0x00040020, 0x00000005, 0x00000001, 0x00000004
  89. 0x0004003b, 0x00000005, 0x00000002, 0x00000001
  90. 0x00040020, 0x00000006, 0x00000003, 0x00000004
  91. 0x0004003b, 0x00000006, 0x00000003, 0x00000003
  92. 0x00020013, 0x00000007, 0x00030021, 0x00000008
  93. 0x00000007, 0x00050036, 0x00000007, 0x00000001
  94. 0x00000000, 0x00000008, 0x000200f8, 0x00000009
  95. 0x0004003d, 0x00000004, 0x0000000a, 0x00000002
  96. 0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
  97. 0x00010038)";
  98. VerifyDisassembly(kHex, kDisassembly);
  99. }
  100. TEST_F(HexToText, WordsLeadingSpace) {
  101. constexpr char kHex[] = R"(
  102. x07230203, x00010600, x00070000, x0000000b
  103. x00000000, x00020011, x00000001, x0003000e
  104. x00000000, x00000001, x0007000f, x00000000
  105. x00000001, x6e69616d, x00000000, x00000002
  106. x00000003, x00060005, x00000002, x636e6166
  107. x74615f79, x62697274, x00657475, x00060005
  108. x00000003, x66657375, x6f5f6c75, x75707475
  109. x00000074, x00040047, x00000002, x0000001e
  110. x00000004, x00040047, x00000003, x0000001e
  111. x00000002, x00030016, x00000004, x00000020
  112. x00040020, x00000005, x00000001, x00000004
  113. x0004003b, x00000005, x00000002, x00000001
  114. x00040020, x00000006, x00000003, x00000004
  115. x0004003b, x00000006, x00000003, x00000003
  116. x00020013, x00000007, x00030021, x00000008
  117. x00000007, x00050036, x00000007, x00000001
  118. x00000000, x00000008, x000200f8, x00000009
  119. x0004003d, x00000004, x0000000a, x00000002
  120. x0003003e, x00000003, x0000000a, x000100fd
  121. x00010038)";
  122. VerifyDisassembly(kHex, kDisassembly);
  123. }
  124. TEST_F(HexToText, WordsTrailingSpace) {
  125. constexpr char kHex[] = R"(0X7230203, 0X10600, 0X70000, 0XB
  126. 0X0, 0X20011, 0X1, 0X3000E
  127. 0X0, 0X1, 0X7000F, 0X0
  128. 0X1, X6E69616D, 0X0, 0X2
  129. 0X3, 0X60005, 0X2, X636E6166
  130. X74615F79, X62697274, 0X657475, 0X60005
  131. 0X3, X66657375, X6F5F6C75, X75707475
  132. 0X74, 0X40047, 0X2, 0X1E
  133. 0X4, 0X40047, 0X3, 0X1E
  134. 0X2, 0X30016, 0X4, 0X20
  135. 0X40020, 0X5, 0X1, 0X4
  136. 0X4003B, 0X5, 0X2, 0X1
  137. 0X40020, 0X6, 0X3, 0X4
  138. 0X4003B, 0X6, 0X3, 0X3
  139. 0X20013, 0X7, 0X30021, 0X8
  140. 0X7, 0X50036, 0X7, 0X1
  141. 0X0, 0X8, 0X200F8, 0X9
  142. 0X4003D, 0X4, 0XA, 0X2
  143. 0X3003E, 0X3, 0XA, 0X100FD
  144. 0X10038
  145. )";
  146. VerifyDisassembly(kHex, kDisassembly);
  147. }
  148. TEST_F(HexToText, BytesLittleEndian) {
  149. constexpr char kHex[] = R"(
  150. 0x03 0x02 0x23 0x07 0x00 0x06 0x01 0x00 0x00 0x00 0x07 0x00 0x0b 0x00 0x00 0x00
  151. 0x00 0x00 0x00 0x00 0x11 0x00 0x02 0x00 0x01 0x00 0x00 0x00 0x0e 0x00 0x03 0x00
  152. 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x0f 0x00 0x07 0x00 0x00 0x00 0x00 0x00
  153. 0x01 0x00 0x00 0x00 0x6d 0x61 0x69 0x6e 0x00 0x00 0x00 0x00 0x02 0x00 0x00 0x00
  154. 0x03 0x00 0x00 0x00 0x05 0x00 0x06 0x00 0x02 0x00 0x00 0x00 0x66 0x61 0x6e 0x63
  155. 0x79 0x5f 0x61 0x74 0x74 0x72 0x69 0x62 0x75 0x74 0x65 0x00 0x05 0x00 0x06 0x00
  156. 0x03 0x00 0x00 0x00 0x75 0x73 0x65 0x66 0x75 0x6c 0x5f 0x6f 0x75 0x74 0x70 0x75
  157. 0x74 0x00 0x00 0x00 0x47 0x00 0x04 0x00 0x02 0x00 0x00 0x00 0x1e 0x00 0x00 0x00
  158. 0x04 0x00 0x00 0x00 0x47 0x00 0x04 0x00 0x03 0x00 0x00 0x00 0x1e 0x00 0x00 0x00
  159. 0x02 0x00 0x00 0x00 0x16 0x00 0x03 0x00 0x04 0x00 0x00 0x00 0x20 0x00 0x00 0x00
  160. 0x20 0x00 0x04 0x00 0x05 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x04 0x00 0x00 0x00
  161. 0x3b 0x00 0x04 0x00 0x05 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x01 0x00 0x00 0x00
  162. 0x20 0x00 0x04 0x00 0x06 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x04 0x00 0x00 0x00
  163. 0x3b 0x00 0x04 0x00 0x06 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x03 0x00 0x00 0x00
  164. 0x13 0x00 0x02 0x00 0x07 0x00 0x00 0x00 0x21 0x00 0x03 0x00 0x08 0x00 0x00 0x00
  165. 0x07 0x00 0x00 0x00 0x36 0x00 0x05 0x00 0x07 0x00 0x00 0x00 0x01 0x00 0x00 0x00
  166. 0x00 0x00 0x00 0x00 0x08 0x00 0x00 0x00 0xf8 0x00 0x02 0x00 0x09 0x00 0x00 0x00
  167. 0x3d 0x00 0x04 0x00 0x04 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x02 0x00 0x00 0x00
  168. 0x3e 0x00 0x03 0x00 0x03 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0xfd 0x00 0x01 0x00
  169. 0x38 0x00 0x01 0x00
  170. )";
  171. VerifyDisassembly(kHex, kDisassembly);
  172. }
  173. TEST_F(HexToText, BytesBigEndian) {
  174. constexpr char kHex[] = R"(
  175. X07,X23,X02,X03, X00,X01,X06,X00, X00,X07,X00,X00, X00,X00,X00,X0B
  176. X00,X00,X00,X00, X00,X02,X00,X11, X00,X00,X00,X01, X00,X03,X00,X0E
  177. X00,X00,X00,X00, X00,X00,X00,X01, X00,X07,X00,X0F, X00,X00,X00,X00
  178. X00,X00,X00,X01, X6E,X69,X61,X6D, X00,X00,X00,X00, X00,X00,X00,X02
  179. X00,X00,X00,X03, X00,X06,X00,X05, X00,X00,X00,X02, X63,X6E,X61,X66
  180. X74,X61,X5F,X79, X62,X69,X72,X74, X00,X65,X74,X75, X00,X06,X00,X05
  181. X00,X00,X00,X03, X66,X65,X73,X75, X6F,X5F,X6C,X75, X75,X70,X74,X75
  182. X00,X00,X00,X74, X00,X04,X00,X47, X00,X00,X00,X02, X00,X00,X00,X1E
  183. X00,X00,X00,X04, X00,X04,X00,X47, X00,X00,X00,X03, X00,X00,X00,X1E
  184. X00,X00,X00,X02, X00,X03,X00,X16, X00,X00,X00,X04, X00,X00,X00,X20
  185. X00,X04,X00,X20, X00,X00,X00,X05, X00,X00,X00,X01, X00,X00,X00,X04
  186. X00,X04,X00,X3B, X00,X00,X00,X05, X00,X00,X00,X02, X00,X00,X00,X01
  187. X00,X04,X00,X20, X00,X00,X00,X06, X00,X00,X00,X03, X00,X00,X00,X04
  188. X00,X04,X00,X3B, X00,X00,X00,X06, X00,X00,X00,X03, X00,X00,X00,X03
  189. X00,X02,X00,X13, X00,X00,X00,X07, X00,X03,X00,X21, X00,X00,X00,X08
  190. X00,X00,X00,X07, X00,X05,X00,X36, X00,X00,X00,X07, X00,X00,X00,X01
  191. X00,X00,X00,X00, X00,X00,X00,X08, X00,X02,X00,XF8, X00,X00,X00,X09
  192. X00,X04,X00,X3D, X00,X00,X00,X04, X00,X00,X00,X0A, X00,X00,X00,X02
  193. X00,X03,X00,X3E, X00,X00,X00,X03, X00,X00,X00,X0A, X00,X01,X00,XFD
  194. X00,X01,X00,X38,
  195. )";
  196. VerifyDisassembly(kHex, kDisassembly);
  197. }
  198. TEST_F(HexToText, StreamLittleEndian) {
  199. constexpr char kHex[] = R"(
  200. 03 02 23 07 00 06 01 00 00 00 07 00 0b 00 00 00
  201. 00 00 00 00 11 00 02 00 01 00 00 00 0e 00 03 00
  202. 00 00 00 00 01 00 00 00 0f 00 07 00 00 00 00 00
  203. 01 00 00 00 6d 61 69 6e 00 00 00 00 02 00 00 00
  204. 03 00 00 00 05 00 06 00 02 00 00 00 66 61 6e 63
  205. 79 5f 61 74 74 72 69 62 75 74 65 00 05 00 06 00
  206. 03 00 00 00 75 73 65 66 75 6c 5f 6f 75 74 70 75
  207. 74 00 00 00 47 00 04 00 02 00 00 00 1e 00 00 00
  208. 04 00 00 00 47 00 04 00 03 00 00 00 1e 00 00 00
  209. 02 00 00 00 16 00 03 00 04 00 00 00 20 00 00 00
  210. 20 00 04 00 05 00 00 00 01 00 00 00 04 00 00 00
  211. 3b 00 04 00 05 00 00 00 02 00 00 00 01 00 00 00
  212. 20 00 04 00 06 00 00 00 03 00 00 00 04 00 00 00
  213. 3b 00 04 00 06 00 00 00 03 00 00 00 03 00 00 00
  214. 13 00 02 00 07 00 00 00 21 00 03 00 08 00 00 00
  215. 07 00 00 00 36 00 05 00 07 00 00 00 01 00 00 00
  216. 00 00 00 00 08 00 00 00 f8 00 02 00 09 00 00 00
  217. 3d 00 04 00 04 00 00 00 0a 00 00 00 02 00 00 00
  218. 3e 00 03 00 03 00 00 00 0a 00 00 00 fd 00 01 00
  219. 38 00 01 00
  220. )";
  221. VerifyDisassembly(kHex, kDisassembly);
  222. }
  223. TEST_F(HexToText, StreamLittleEndianNoDelim) {
  224. constexpr char kHex[] = R"(
  225. 0302230700060100000007000B000000
  226. 0000000011000200010000000E000300
  227. 00000000010000000F00070000000000
  228. 010000006D61696E0000000002000000
  229. 03000000050006000200000066616E63
  230. 795F6174747269627574650005000600
  231. 0300000075736566756C5F6F75747075
  232. 7400000047000400020000001E000000
  233. 0400000047000400030000001E000000
  234. 02000000160003000400000020000000
  235. 20000400050000000100000004000000
  236. 3B000400050000000200000001000000
  237. 20000400060000000300000004000000
  238. 3B000400060000000300000003000000
  239. 13000200070000002100030008000000
  240. 07000000360005000700000001000000
  241. 0000000008000000F800020009000000
  242. 3D000400040000000A00000002000000
  243. 3E000300030000000A000000FD000100
  244. 38000100
  245. )";
  246. VerifyDisassembly(kHex, kDisassembly);
  247. }
  248. TEST_F(HexToText, StreamBigEndian) {
  249. constexpr char kHex[] = R"(
  250. 07230203, 00010600, 00070000, 0000000b
  251. 00000000, 00020011, 00000001, 0003000e
  252. 00000000, 00000001, 0007000f, 00000000
  253. 00000001, 6e69616d, 00000000, 00000002
  254. 00000003, 00060005, 00000002, 636e6166
  255. 74615f79, 62697274, 00657475, 00060005
  256. 00000003, 66657375, 6f5f6c75, 75707475
  257. 00000074, 00040047, 00000002, 0000001e
  258. 00000004, 00040047, 00000003, 0000001e
  259. 00000002, 00030016, 00000004, 00000020
  260. 00040020, 00000005, 00000001, 00000004
  261. 0004003b, 00000005, 00000002, 00000001
  262. 00040020, 00000006, 00000003, 00000004
  263. 0004003b, 00000006, 00000003, 00000003
  264. 00020013, 00000007, 00030021, 00000008
  265. 00000007, 00050036, 00000007, 00000001
  266. 00000000, 00000008, 000200f8, 00000009
  267. 0004003d, 00000004, 0000000a, 00000002
  268. 0003003e, 00000003, 0000000a, 000100fd
  269. 00010038,
  270. )";
  271. VerifyDisassembly(kHex, kDisassembly);
  272. }
  273. TEST_F(HexToText, WordsNoDelimieter) {
  274. constexpr char kHex[] = R"(0x07230203 0x00010600 0x00070000 0x0000000b
  275. 0x00000000 0x00020011 0x00000001 0x0003000e
  276. 0x00000000 0x00000001 0x0007000f 0x00000000
  277. 0x00000001 0x6e69616d 0x00000000 0x00000002
  278. 0x00000003 0x00060005 0x00000002 0x636e6166
  279. 0x74615f79 0x62697274 0x00657475 0x00060005
  280. 0x00000003 0x666573750x6f5f6c75 0x75707475
  281. 0x00000074 0x00040047 0x00000002 0x0000001e
  282. 0x00000004 0x00040047 0x00000003 0x0000001e
  283. 0x00000002 0x00030016 0x00000004 0x00000020
  284. 0x00040020 0x00000005 0x00000001 0x00000004
  285. 0x0004003b 0x00000005 0x00000002 0x00000001
  286. 0x00040020 0x00000006 0x00000003 0x00000004
  287. 0x0004003b 0x00000006 0x00000003 0x00000003
  288. 0x00020013 0x00000007 0x00030021 0x00000008
  289. 0x00000007 0x00050036 0x00000007 0x00000001
  290. 0x00000000 0x00000008 0x000200f8 0x00000009
  291. 0x0004003d 0x00000004 0x0000000a 0x00000002
  292. 0x0003003e 0x00000003 0x0000000a 0x000100fd
  293. 0x00010038)";
  294. EnsureError(kHex);
  295. }
  296. TEST_F(HexToText, InvalidFirstToken) {
  297. constexpr char kHex[] = R"(0x17230203, 0x00010600, 0x00070000, 0x0000000b
  298. 0x00000000, 0x00020011, 0x00000001, 0x0003000e
  299. 0x00000000, 0x00000001, 0x0007000f, 0x00000000
  300. 0x00000001, 0x6e69616d, 0x00000000, 0x00000002
  301. 0x00000003, 0x00060005, 0x00000002, 0x636e6166
  302. 0x74615f79, 0x62697274, 0x00657475, 0x00060005
  303. 0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
  304. 0x00000074, 0x00040047, 0x00000002, 0x0000001e
  305. 0x00000004, 0x00040047, 0x00000003, 0x0000001e
  306. 0x00000002, 0x00030016, 0x00000004, 0x00000020
  307. 0x00040020, 0x00000005, 0x00000001, 0x00000004
  308. 0x0004003b, 0x00000005, 0x00000002, 0x00000001
  309. 0x00040020, 0x00000006, 0x00000003, 0x00000004
  310. 0x0004003b, 0x00000006, 0x00000003, 0x00000003
  311. 0x00020013, 0x00000007, 0x00030021, 0x00000008
  312. 0x00000007, 0x00050036, 0x00000007, 0x00000001
  313. 0x00000000, 0x00000008, 0x000200f8, 0x00000009
  314. 0x0004003d, 0x00000004, 0x0000000a, 0x00000002
  315. 0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
  316. 0x00010038)";
  317. EnsureError(kHex);
  318. }
  319. TEST_F(HexToText, NonHexCharacter) {
  320. // Note: a 6 is replaced with G in this stream
  321. constexpr char kHex[] = R"(0x07230203, 0x00010600, 0x00070000, 0x0000000b
  322. 0x00000000, 0x00020011, 0x00000001, 0x0003000e
  323. 0x00000000, 0x00000001, 0x0007000f, 0x00000000
  324. 0x00000001, 0x6e69616d, 0x00000000, 0x00000002
  325. 0x00000003, 0x00060005, 0x00000002, 0x636e6166
  326. 0x74615f79, 0x62697274, 0x00657475, 0x00060005
  327. 0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
  328. 0x00000074, 0x00040047, 0x00000002, 0x0000001e
  329. 0x00000004, 0x00040047, 0x00000003, 0x0000001e
  330. 0x00000002, 0x0003001G, 0x00000004, 0x00000020
  331. 0x00040020, 0x00000005, 0x00000001, 0x00000004
  332. 0x0004003b, 0x00000005, 0x00000002, 0x00000001
  333. 0x00040020, 0x00000006, 0x00000003, 0x00000004
  334. 0x0004003b, 0x00000006, 0x00000003, 0x00000003
  335. 0x00020013, 0x00000007, 0x00030021, 0x00000008
  336. 0x00000007, 0x00050036, 0x00000007, 0x00000001
  337. 0x00000000, 0x00000008, 0x000200f8, 0x00000009
  338. 0x0004003d, 0x00000004, 0x0000000a, 0x00000002
  339. 0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
  340. 0x00010038)";
  341. EnsureError(kHex);
  342. }
  343. TEST_F(HexToText, MissingExpectedPrefix) {
  344. constexpr char kHex[] = R"(0x07230203, 0x00010600, 0x00070000, 0x0000000b
  345. 0x00000000, 0x00020011, 0x00000001, 0x0003000e
  346. 0x00000000, 0x00000001, 0x0007000f, 0x00000000
  347. 0x00000001, 0x6e69616d, 0x00000000, 0x00000002
  348. 0x00000003, 0x00060005, 0x00000002, 0x636e6166
  349. 0x74615f79, 0x62697274, 0x00657475, 0x00060005
  350. 0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
  351. 0x00000074, 0x00040047, 0x00000002, 0x0000001e
  352. 0x00000004, 0x00040047, 0x00000003, 0x0000001e
  353. 0x00000002, 0x00030016, 0x00000004, 0x00000020
  354. 0x00040020, 0x00000005, 00000001, 0x00000004
  355. 0x0004003b, 0x00000005, 0x00000002, 0x00000001
  356. 0x00040020, 0x00000006, 0x00000003, 0x00000004
  357. 0x0004003b, 0x00000006, 0x00000003, 0x00000003
  358. 0x00020013, 0x00000007, 0x00030021, 0x00000008
  359. 0x00000007, 0x00050036, 0x00000007, 0x00000001
  360. 0x00000000, 0x00000008, 0x000200f8, 0x00000009
  361. 0x0004003d, 0x00000004, 0x0000000a, 0x00000002
  362. 0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
  363. 0x00010038)";
  364. EnsureError(kHex);
  365. }
  366. TEST_F(HexToText, UnexpectedPrefix) {
  367. constexpr char kHex[] = R"(07230203, 00010600, 00070000, 0000000b
  368. 00000000, 00020011, 00000001, 0003000e
  369. 00000000, 00000001, 0007000f, 00000000
  370. 00000001, 6e69616d, 00000000, 00000002
  371. 00000003, 00060005, 00000002, 636e6166
  372. 74615f79, 62697274, 00657475, 00060005
  373. 00000003, 66657375, 6f5f6c75, 75707475
  374. 00000074, 00040047, 00000002, 0000001e
  375. 00000004, 00040047, 00000003, 0000001e
  376. 00000002, 00030016, 00000004, 00000020
  377. 00040020, 00000005, 0x00000001, 00000004
  378. 0004003b, 00000005, 00000002, 00000001
  379. 00040020, 00000006, 00000003, 00000004
  380. 0004003b, 00000006, 00000003, 00000003
  381. 00020013, 00000007, 00030021, 00000008
  382. 00000007, 00050036, 00000007, 00000001
  383. 00000000, 00000008, 000200f8, 00000009
  384. 0004003d, 00000004, 0000000a, 00000002
  385. 0003003e, 00000003, 0000000a, 000100fd
  386. 00010038)";
  387. EnsureError(kHex);
  388. }
  389. } // namespace
  390. } // namespace spvtools