mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-11-24 20:40:13 +00:00
430 lines
16 KiB
C++
430 lines
16 KiB
C++
|
// Copyright (c) 2024 Google LLC.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
#include <vector>
|
||
|
|
||
|
#include "gmock/gmock.h"
|
||
|
#include "test/test_fixture.h"
|
||
|
#include "tools/io.h"
|
||
|
|
||
|
namespace spvtools {
|
||
|
namespace {
|
||
|
|
||
|
using spvtest::ScopedContext;
|
||
|
|
||
|
class HexToText : public ::testing::Test {
|
||
|
public:
|
||
|
void VerifyDisassembly(const char* hex_stream,
|
||
|
const char* expected_disassembly) {
|
||
|
std::vector<char> stream(hex_stream, hex_stream + strlen(hex_stream));
|
||
|
std::vector<uint32_t> binary;
|
||
|
|
||
|
// Convert hext to binary first.
|
||
|
EXPECT_TRUE(ConvertHexToBinary(stream, &binary));
|
||
|
|
||
|
// Then disassemble it.
|
||
|
spv_diagnostic diagnostic = nullptr;
|
||
|
spv_text disassembly = nullptr;
|
||
|
EXPECT_EQ(spvBinaryToText(ScopedContext().context, binary.data(),
|
||
|
binary.size(), SPV_BINARY_TO_TEXT_OPTION_NONE,
|
||
|
&disassembly, &diagnostic),
|
||
|
SPV_SUCCESS);
|
||
|
EXPECT_EQ(diagnostic, nullptr);
|
||
|
|
||
|
// Verify disassembly is as expected and clean up.
|
||
|
EXPECT_STREQ(disassembly->str, expected_disassembly);
|
||
|
|
||
|
spvDiagnosticDestroy(diagnostic);
|
||
|
spvTextDestroy(disassembly);
|
||
|
}
|
||
|
|
||
|
void EnsureError(const char* hex_stream) {
|
||
|
std::vector<char> stream(hex_stream, hex_stream + strlen(hex_stream));
|
||
|
std::vector<uint32_t> binary;
|
||
|
|
||
|
// Make sure there is a parse error
|
||
|
EXPECT_FALSE(ConvertHexToBinary(stream, &binary));
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// The actual assembly doesn't matter, just the hex parsing. All the tests use
|
||
|
// the following SPIR-V.
|
||
|
constexpr char kDisassembly[] = R"(; SPIR-V
|
||
|
; Version: 1.6
|
||
|
; Generator: Khronos SPIR-V Tools Assembler; 0
|
||
|
; Bound: 11
|
||
|
; Schema: 0
|
||
|
OpCapability Shader
|
||
|
OpMemoryModel Logical GLSL450
|
||
|
OpEntryPoint Vertex %1 "main" %2 %3
|
||
|
OpName %2 "fancy_attribute"
|
||
|
OpName %3 "useful_output"
|
||
|
OpDecorate %2 Location 4
|
||
|
OpDecorate %3 Location 2
|
||
|
%4 = OpTypeFloat 32
|
||
|
%5 = OpTypePointer Input %4
|
||
|
%2 = OpVariable %5 Input
|
||
|
%6 = OpTypePointer Output %4
|
||
|
%3 = OpVariable %6 Output
|
||
|
%7 = OpTypeVoid
|
||
|
%8 = OpTypeFunction %7
|
||
|
%1 = OpFunction %7 None %8
|
||
|
%9 = OpLabel
|
||
|
%10 = OpLoad %4 %2
|
||
|
OpStore %3 %10
|
||
|
OpReturn
|
||
|
OpFunctionEnd
|
||
|
)";
|
||
|
|
||
|
TEST_F(HexToText, Words) {
|
||
|
constexpr char kHex[] = R"(0x07230203, 0x00010600, 0x00070000, 0x0000000b
|
||
|
0x00000000, 0x00020011, 0x00000001, 0x0003000e
|
||
|
0x00000000, 0x00000001, 0x0007000f, 0x00000000
|
||
|
0x00000001, 0x6e69616d, 0x00000000, 0x00000002
|
||
|
0x00000003, 0x00060005, 0x00000002, 0x636e6166
|
||
|
0x74615f79, 0x62697274, 0x00657475, 0x00060005
|
||
|
0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
|
||
|
0x00000074, 0x00040047, 0x00000002, 0x0000001e
|
||
|
0x00000004, 0x00040047, 0x00000003, 0x0000001e
|
||
|
0x00000002, 0x00030016, 0x00000004, 0x00000020
|
||
|
0x00040020, 0x00000005, 0x00000001, 0x00000004
|
||
|
0x0004003b, 0x00000005, 0x00000002, 0x00000001
|
||
|
0x00040020, 0x00000006, 0x00000003, 0x00000004
|
||
|
0x0004003b, 0x00000006, 0x00000003, 0x00000003
|
||
|
0x00020013, 0x00000007, 0x00030021, 0x00000008
|
||
|
0x00000007, 0x00050036, 0x00000007, 0x00000001
|
||
|
0x00000000, 0x00000008, 0x000200f8, 0x00000009
|
||
|
0x0004003d, 0x00000004, 0x0000000a, 0x00000002
|
||
|
0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
|
||
|
0x00010038)";
|
||
|
|
||
|
VerifyDisassembly(kHex, kDisassembly);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, WordsLeadingSpace) {
|
||
|
constexpr char kHex[] = R"(
|
||
|
x07230203, x00010600, x00070000, x0000000b
|
||
|
x00000000, x00020011, x00000001, x0003000e
|
||
|
x00000000, x00000001, x0007000f, x00000000
|
||
|
x00000001, x6e69616d, x00000000, x00000002
|
||
|
x00000003, x00060005, x00000002, x636e6166
|
||
|
x74615f79, x62697274, x00657475, x00060005
|
||
|
x00000003, x66657375, x6f5f6c75, x75707475
|
||
|
x00000074, x00040047, x00000002, x0000001e
|
||
|
x00000004, x00040047, x00000003, x0000001e
|
||
|
x00000002, x00030016, x00000004, x00000020
|
||
|
x00040020, x00000005, x00000001, x00000004
|
||
|
x0004003b, x00000005, x00000002, x00000001
|
||
|
x00040020, x00000006, x00000003, x00000004
|
||
|
x0004003b, x00000006, x00000003, x00000003
|
||
|
x00020013, x00000007, x00030021, x00000008
|
||
|
x00000007, x00050036, x00000007, x00000001
|
||
|
x00000000, x00000008, x000200f8, x00000009
|
||
|
x0004003d, x00000004, x0000000a, x00000002
|
||
|
x0003003e, x00000003, x0000000a, x000100fd
|
||
|
x00010038)";
|
||
|
|
||
|
VerifyDisassembly(kHex, kDisassembly);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, WordsTrailingSpace) {
|
||
|
constexpr char kHex[] = R"(0X7230203, 0X10600, 0X70000, 0XB
|
||
|
0X0, 0X20011, 0X1, 0X3000E
|
||
|
0X0, 0X1, 0X7000F, 0X0
|
||
|
0X1, X6E69616D, 0X0, 0X2
|
||
|
0X3, 0X60005, 0X2, X636E6166
|
||
|
X74615F79, X62697274, 0X657475, 0X60005
|
||
|
0X3, X66657375, X6F5F6C75, X75707475
|
||
|
0X74, 0X40047, 0X2, 0X1E
|
||
|
0X4, 0X40047, 0X3, 0X1E
|
||
|
0X2, 0X30016, 0X4, 0X20
|
||
|
0X40020, 0X5, 0X1, 0X4
|
||
|
0X4003B, 0X5, 0X2, 0X1
|
||
|
0X40020, 0X6, 0X3, 0X4
|
||
|
0X4003B, 0X6, 0X3, 0X3
|
||
|
0X20013, 0X7, 0X30021, 0X8
|
||
|
0X7, 0X50036, 0X7, 0X1
|
||
|
0X0, 0X8, 0X200F8, 0X9
|
||
|
0X4003D, 0X4, 0XA, 0X2
|
||
|
0X3003E, 0X3, 0XA, 0X100FD
|
||
|
0X10038
|
||
|
|
||
|
)";
|
||
|
|
||
|
VerifyDisassembly(kHex, kDisassembly);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, BytesLittleEndian) {
|
||
|
constexpr char kHex[] = R"(
|
||
|
0x03 0x02 0x23 0x07 0x00 0x06 0x01 0x00 0x00 0x00 0x07 0x00 0x0b 0x00 0x00 0x00
|
||
|
0x00 0x00 0x00 0x00 0x11 0x00 0x02 0x00 0x01 0x00 0x00 0x00 0x0e 0x00 0x03 0x00
|
||
|
0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x0f 0x00 0x07 0x00 0x00 0x00 0x00 0x00
|
||
|
0x01 0x00 0x00 0x00 0x6d 0x61 0x69 0x6e 0x00 0x00 0x00 0x00 0x02 0x00 0x00 0x00
|
||
|
0x03 0x00 0x00 0x00 0x05 0x00 0x06 0x00 0x02 0x00 0x00 0x00 0x66 0x61 0x6e 0x63
|
||
|
0x79 0x5f 0x61 0x74 0x74 0x72 0x69 0x62 0x75 0x74 0x65 0x00 0x05 0x00 0x06 0x00
|
||
|
0x03 0x00 0x00 0x00 0x75 0x73 0x65 0x66 0x75 0x6c 0x5f 0x6f 0x75 0x74 0x70 0x75
|
||
|
0x74 0x00 0x00 0x00 0x47 0x00 0x04 0x00 0x02 0x00 0x00 0x00 0x1e 0x00 0x00 0x00
|
||
|
0x04 0x00 0x00 0x00 0x47 0x00 0x04 0x00 0x03 0x00 0x00 0x00 0x1e 0x00 0x00 0x00
|
||
|
0x02 0x00 0x00 0x00 0x16 0x00 0x03 0x00 0x04 0x00 0x00 0x00 0x20 0x00 0x00 0x00
|
||
|
0x20 0x00 0x04 0x00 0x05 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x04 0x00 0x00 0x00
|
||
|
0x3b 0x00 0x04 0x00 0x05 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x01 0x00 0x00 0x00
|
||
|
0x20 0x00 0x04 0x00 0x06 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x04 0x00 0x00 0x00
|
||
|
0x3b 0x00 0x04 0x00 0x06 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x03 0x00 0x00 0x00
|
||
|
0x13 0x00 0x02 0x00 0x07 0x00 0x00 0x00 0x21 0x00 0x03 0x00 0x08 0x00 0x00 0x00
|
||
|
0x07 0x00 0x00 0x00 0x36 0x00 0x05 0x00 0x07 0x00 0x00 0x00 0x01 0x00 0x00 0x00
|
||
|
0x00 0x00 0x00 0x00 0x08 0x00 0x00 0x00 0xf8 0x00 0x02 0x00 0x09 0x00 0x00 0x00
|
||
|
0x3d 0x00 0x04 0x00 0x04 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x02 0x00 0x00 0x00
|
||
|
0x3e 0x00 0x03 0x00 0x03 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0xfd 0x00 0x01 0x00
|
||
|
0x38 0x00 0x01 0x00
|
||
|
)";
|
||
|
|
||
|
VerifyDisassembly(kHex, kDisassembly);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, BytesBigEndian) {
|
||
|
constexpr char kHex[] = R"(
|
||
|
X07,X23,X02,X03, X00,X01,X06,X00, X00,X07,X00,X00, X00,X00,X00,X0B
|
||
|
X00,X00,X00,X00, X00,X02,X00,X11, X00,X00,X00,X01, X00,X03,X00,X0E
|
||
|
X00,X00,X00,X00, X00,X00,X00,X01, X00,X07,X00,X0F, X00,X00,X00,X00
|
||
|
X00,X00,X00,X01, X6E,X69,X61,X6D, X00,X00,X00,X00, X00,X00,X00,X02
|
||
|
X00,X00,X00,X03, X00,X06,X00,X05, X00,X00,X00,X02, X63,X6E,X61,X66
|
||
|
X74,X61,X5F,X79, X62,X69,X72,X74, X00,X65,X74,X75, X00,X06,X00,X05
|
||
|
X00,X00,X00,X03, X66,X65,X73,X75, X6F,X5F,X6C,X75, X75,X70,X74,X75
|
||
|
X00,X00,X00,X74, X00,X04,X00,X47, X00,X00,X00,X02, X00,X00,X00,X1E
|
||
|
X00,X00,X00,X04, X00,X04,X00,X47, X00,X00,X00,X03, X00,X00,X00,X1E
|
||
|
X00,X00,X00,X02, X00,X03,X00,X16, X00,X00,X00,X04, X00,X00,X00,X20
|
||
|
X00,X04,X00,X20, X00,X00,X00,X05, X00,X00,X00,X01, X00,X00,X00,X04
|
||
|
X00,X04,X00,X3B, X00,X00,X00,X05, X00,X00,X00,X02, X00,X00,X00,X01
|
||
|
X00,X04,X00,X20, X00,X00,X00,X06, X00,X00,X00,X03, X00,X00,X00,X04
|
||
|
X00,X04,X00,X3B, X00,X00,X00,X06, X00,X00,X00,X03, X00,X00,X00,X03
|
||
|
X00,X02,X00,X13, X00,X00,X00,X07, X00,X03,X00,X21, X00,X00,X00,X08
|
||
|
X00,X00,X00,X07, X00,X05,X00,X36, X00,X00,X00,X07, X00,X00,X00,X01
|
||
|
X00,X00,X00,X00, X00,X00,X00,X08, X00,X02,X00,XF8, X00,X00,X00,X09
|
||
|
X00,X04,X00,X3D, X00,X00,X00,X04, X00,X00,X00,X0A, X00,X00,X00,X02
|
||
|
X00,X03,X00,X3E, X00,X00,X00,X03, X00,X00,X00,X0A, X00,X01,X00,XFD
|
||
|
X00,X01,X00,X38,
|
||
|
)";
|
||
|
|
||
|
VerifyDisassembly(kHex, kDisassembly);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, StreamLittleEndian) {
|
||
|
constexpr char kHex[] = R"(
|
||
|
03 02 23 07 00 06 01 00 00 00 07 00 0b 00 00 00
|
||
|
00 00 00 00 11 00 02 00 01 00 00 00 0e 00 03 00
|
||
|
00 00 00 00 01 00 00 00 0f 00 07 00 00 00 00 00
|
||
|
01 00 00 00 6d 61 69 6e 00 00 00 00 02 00 00 00
|
||
|
03 00 00 00 05 00 06 00 02 00 00 00 66 61 6e 63
|
||
|
79 5f 61 74 74 72 69 62 75 74 65 00 05 00 06 00
|
||
|
03 00 00 00 75 73 65 66 75 6c 5f 6f 75 74 70 75
|
||
|
74 00 00 00 47 00 04 00 02 00 00 00 1e 00 00 00
|
||
|
04 00 00 00 47 00 04 00 03 00 00 00 1e 00 00 00
|
||
|
02 00 00 00 16 00 03 00 04 00 00 00 20 00 00 00
|
||
|
20 00 04 00 05 00 00 00 01 00 00 00 04 00 00 00
|
||
|
3b 00 04 00 05 00 00 00 02 00 00 00 01 00 00 00
|
||
|
20 00 04 00 06 00 00 00 03 00 00 00 04 00 00 00
|
||
|
3b 00 04 00 06 00 00 00 03 00 00 00 03 00 00 00
|
||
|
13 00 02 00 07 00 00 00 21 00 03 00 08 00 00 00
|
||
|
07 00 00 00 36 00 05 00 07 00 00 00 01 00 00 00
|
||
|
00 00 00 00 08 00 00 00 f8 00 02 00 09 00 00 00
|
||
|
3d 00 04 00 04 00 00 00 0a 00 00 00 02 00 00 00
|
||
|
3e 00 03 00 03 00 00 00 0a 00 00 00 fd 00 01 00
|
||
|
38 00 01 00
|
||
|
)";
|
||
|
|
||
|
VerifyDisassembly(kHex, kDisassembly);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, StreamLittleEndianNoDelim) {
|
||
|
constexpr char kHex[] = R"(
|
||
|
0302230700060100000007000B000000
|
||
|
0000000011000200010000000E000300
|
||
|
00000000010000000F00070000000000
|
||
|
010000006D61696E0000000002000000
|
||
|
03000000050006000200000066616E63
|
||
|
795F6174747269627574650005000600
|
||
|
0300000075736566756C5F6F75747075
|
||
|
7400000047000400020000001E000000
|
||
|
0400000047000400030000001E000000
|
||
|
02000000160003000400000020000000
|
||
|
20000400050000000100000004000000
|
||
|
3B000400050000000200000001000000
|
||
|
20000400060000000300000004000000
|
||
|
3B000400060000000300000003000000
|
||
|
13000200070000002100030008000000
|
||
|
07000000360005000700000001000000
|
||
|
0000000008000000F800020009000000
|
||
|
3D000400040000000A00000002000000
|
||
|
3E000300030000000A000000FD000100
|
||
|
38000100
|
||
|
)";
|
||
|
|
||
|
VerifyDisassembly(kHex, kDisassembly);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, StreamBigEndian) {
|
||
|
constexpr char kHex[] = R"(
|
||
|
07230203, 00010600, 00070000, 0000000b
|
||
|
00000000, 00020011, 00000001, 0003000e
|
||
|
00000000, 00000001, 0007000f, 00000000
|
||
|
00000001, 6e69616d, 00000000, 00000002
|
||
|
00000003, 00060005, 00000002, 636e6166
|
||
|
74615f79, 62697274, 00657475, 00060005
|
||
|
00000003, 66657375, 6f5f6c75, 75707475
|
||
|
00000074, 00040047, 00000002, 0000001e
|
||
|
00000004, 00040047, 00000003, 0000001e
|
||
|
00000002, 00030016, 00000004, 00000020
|
||
|
00040020, 00000005, 00000001, 00000004
|
||
|
0004003b, 00000005, 00000002, 00000001
|
||
|
00040020, 00000006, 00000003, 00000004
|
||
|
0004003b, 00000006, 00000003, 00000003
|
||
|
00020013, 00000007, 00030021, 00000008
|
||
|
00000007, 00050036, 00000007, 00000001
|
||
|
00000000, 00000008, 000200f8, 00000009
|
||
|
0004003d, 00000004, 0000000a, 00000002
|
||
|
0003003e, 00000003, 0000000a, 000100fd
|
||
|
00010038,
|
||
|
)";
|
||
|
|
||
|
VerifyDisassembly(kHex, kDisassembly);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, WordsNoDelimieter) {
|
||
|
constexpr char kHex[] = R"(0x07230203 0x00010600 0x00070000 0x0000000b
|
||
|
0x00000000 0x00020011 0x00000001 0x0003000e
|
||
|
0x00000000 0x00000001 0x0007000f 0x00000000
|
||
|
0x00000001 0x6e69616d 0x00000000 0x00000002
|
||
|
0x00000003 0x00060005 0x00000002 0x636e6166
|
||
|
0x74615f79 0x62697274 0x00657475 0x00060005
|
||
|
0x00000003 0x666573750x6f5f6c75 0x75707475
|
||
|
0x00000074 0x00040047 0x00000002 0x0000001e
|
||
|
0x00000004 0x00040047 0x00000003 0x0000001e
|
||
|
0x00000002 0x00030016 0x00000004 0x00000020
|
||
|
0x00040020 0x00000005 0x00000001 0x00000004
|
||
|
0x0004003b 0x00000005 0x00000002 0x00000001
|
||
|
0x00040020 0x00000006 0x00000003 0x00000004
|
||
|
0x0004003b 0x00000006 0x00000003 0x00000003
|
||
|
0x00020013 0x00000007 0x00030021 0x00000008
|
||
|
0x00000007 0x00050036 0x00000007 0x00000001
|
||
|
0x00000000 0x00000008 0x000200f8 0x00000009
|
||
|
0x0004003d 0x00000004 0x0000000a 0x00000002
|
||
|
0x0003003e 0x00000003 0x0000000a 0x000100fd
|
||
|
0x00010038)";
|
||
|
|
||
|
EnsureError(kHex);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, InvalidFirstToken) {
|
||
|
constexpr char kHex[] = R"(0x17230203, 0x00010600, 0x00070000, 0x0000000b
|
||
|
0x00000000, 0x00020011, 0x00000001, 0x0003000e
|
||
|
0x00000000, 0x00000001, 0x0007000f, 0x00000000
|
||
|
0x00000001, 0x6e69616d, 0x00000000, 0x00000002
|
||
|
0x00000003, 0x00060005, 0x00000002, 0x636e6166
|
||
|
0x74615f79, 0x62697274, 0x00657475, 0x00060005
|
||
|
0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
|
||
|
0x00000074, 0x00040047, 0x00000002, 0x0000001e
|
||
|
0x00000004, 0x00040047, 0x00000003, 0x0000001e
|
||
|
0x00000002, 0x00030016, 0x00000004, 0x00000020
|
||
|
0x00040020, 0x00000005, 0x00000001, 0x00000004
|
||
|
0x0004003b, 0x00000005, 0x00000002, 0x00000001
|
||
|
0x00040020, 0x00000006, 0x00000003, 0x00000004
|
||
|
0x0004003b, 0x00000006, 0x00000003, 0x00000003
|
||
|
0x00020013, 0x00000007, 0x00030021, 0x00000008
|
||
|
0x00000007, 0x00050036, 0x00000007, 0x00000001
|
||
|
0x00000000, 0x00000008, 0x000200f8, 0x00000009
|
||
|
0x0004003d, 0x00000004, 0x0000000a, 0x00000002
|
||
|
0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
|
||
|
0x00010038)";
|
||
|
|
||
|
EnsureError(kHex);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, NonHexCharacter) {
|
||
|
// Note: a 6 is replaced with G in this stream
|
||
|
constexpr char kHex[] = R"(0x07230203, 0x00010600, 0x00070000, 0x0000000b
|
||
|
0x00000000, 0x00020011, 0x00000001, 0x0003000e
|
||
|
0x00000000, 0x00000001, 0x0007000f, 0x00000000
|
||
|
0x00000001, 0x6e69616d, 0x00000000, 0x00000002
|
||
|
0x00000003, 0x00060005, 0x00000002, 0x636e6166
|
||
|
0x74615f79, 0x62697274, 0x00657475, 0x00060005
|
||
|
0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
|
||
|
0x00000074, 0x00040047, 0x00000002, 0x0000001e
|
||
|
0x00000004, 0x00040047, 0x00000003, 0x0000001e
|
||
|
0x00000002, 0x0003001G, 0x00000004, 0x00000020
|
||
|
0x00040020, 0x00000005, 0x00000001, 0x00000004
|
||
|
0x0004003b, 0x00000005, 0x00000002, 0x00000001
|
||
|
0x00040020, 0x00000006, 0x00000003, 0x00000004
|
||
|
0x0004003b, 0x00000006, 0x00000003, 0x00000003
|
||
|
0x00020013, 0x00000007, 0x00030021, 0x00000008
|
||
|
0x00000007, 0x00050036, 0x00000007, 0x00000001
|
||
|
0x00000000, 0x00000008, 0x000200f8, 0x00000009
|
||
|
0x0004003d, 0x00000004, 0x0000000a, 0x00000002
|
||
|
0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
|
||
|
0x00010038)";
|
||
|
|
||
|
EnsureError(kHex);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, MissingExpectedPrefix) {
|
||
|
constexpr char kHex[] = R"(0x07230203, 0x00010600, 0x00070000, 0x0000000b
|
||
|
0x00000000, 0x00020011, 0x00000001, 0x0003000e
|
||
|
0x00000000, 0x00000001, 0x0007000f, 0x00000000
|
||
|
0x00000001, 0x6e69616d, 0x00000000, 0x00000002
|
||
|
0x00000003, 0x00060005, 0x00000002, 0x636e6166
|
||
|
0x74615f79, 0x62697274, 0x00657475, 0x00060005
|
||
|
0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
|
||
|
0x00000074, 0x00040047, 0x00000002, 0x0000001e
|
||
|
0x00000004, 0x00040047, 0x00000003, 0x0000001e
|
||
|
0x00000002, 0x00030016, 0x00000004, 0x00000020
|
||
|
0x00040020, 0x00000005, 00000001, 0x00000004
|
||
|
0x0004003b, 0x00000005, 0x00000002, 0x00000001
|
||
|
0x00040020, 0x00000006, 0x00000003, 0x00000004
|
||
|
0x0004003b, 0x00000006, 0x00000003, 0x00000003
|
||
|
0x00020013, 0x00000007, 0x00030021, 0x00000008
|
||
|
0x00000007, 0x00050036, 0x00000007, 0x00000001
|
||
|
0x00000000, 0x00000008, 0x000200f8, 0x00000009
|
||
|
0x0004003d, 0x00000004, 0x0000000a, 0x00000002
|
||
|
0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
|
||
|
0x00010038)";
|
||
|
|
||
|
EnsureError(kHex);
|
||
|
}
|
||
|
|
||
|
TEST_F(HexToText, UnexpectedPrefix) {
|
||
|
constexpr char kHex[] = R"(07230203, 00010600, 00070000, 0000000b
|
||
|
00000000, 00020011, 00000001, 0003000e
|
||
|
00000000, 00000001, 0007000f, 00000000
|
||
|
00000001, 6e69616d, 00000000, 00000002
|
||
|
00000003, 00060005, 00000002, 636e6166
|
||
|
74615f79, 62697274, 00657475, 00060005
|
||
|
00000003, 66657375, 6f5f6c75, 75707475
|
||
|
00000074, 00040047, 00000002, 0000001e
|
||
|
00000004, 00040047, 00000003, 0000001e
|
||
|
00000002, 00030016, 00000004, 00000020
|
||
|
00040020, 00000005, 0x00000001, 00000004
|
||
|
0004003b, 00000005, 00000002, 00000001
|
||
|
00040020, 00000006, 00000003, 00000004
|
||
|
0004003b, 00000006, 00000003, 00000003
|
||
|
00020013, 00000007, 00030021, 00000008
|
||
|
00000007, 00050036, 00000007, 00000001
|
||
|
00000000, 00000008, 000200f8, 00000009
|
||
|
0004003d, 00000004, 0000000a, 00000002
|
||
|
0003003e, 00000003, 0000000a, 000100fd
|
||
|
00010038)";
|
||
|
|
||
|
EnsureError(kHex);
|
||
|
}
|
||
|
} // namespace
|
||
|
} // namespace spvtools
|