1719ec93aSZachary Turner #include "gtest/gtest.h"
2b9c1b51eSKate Stone #include <limits.h>
3719ec93aSZachary Turner
428529f60SBruce Mitchener #include "lldb/Utility/StringExtractor.h"
5719ec93aSZachary Turner
6b9c1b51eSKate Stone namespace {
7b9c1b51eSKate Stone class StringExtractorTest : public ::testing::Test {};
8*d35b42f2SJonas Devlieghere } // namespace
9719ec93aSZachary Turner
TEST_F(StringExtractorTest,InitEmpty)10b9c1b51eSKate Stone TEST_F(StringExtractorTest, InitEmpty) {
11*d35b42f2SJonas Devlieghere llvm::StringRef kEmptyString = "";
12719ec93aSZachary Turner StringExtractor ex(kEmptyString);
13719ec93aSZachary Turner
14719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
153dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetFilePos());
16*d35b42f2SJonas Devlieghere ASSERT_EQ(kEmptyString, ex.GetStringRef());
17719ec93aSZachary Turner ASSERT_EQ(true, ex.Empty());
183dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetBytesLeft());
19b9739d40SPavel Labath ASSERT_EQ(nullptr, ex.Peek());
20719ec93aSZachary Turner }
21719ec93aSZachary Turner
TEST_F(StringExtractorTest,InitMisc)22b9c1b51eSKate Stone TEST_F(StringExtractorTest, InitMisc) {
23*d35b42f2SJonas Devlieghere llvm::StringRef kInitMiscString = "Hello, StringExtractor!";
24719ec93aSZachary Turner StringExtractor ex(kInitMiscString);
25719ec93aSZachary Turner
26719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
273dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetFilePos());
28*d35b42f2SJonas Devlieghere ASSERT_EQ(kInitMiscString, ex.GetStringRef());
29719ec93aSZachary Turner ASSERT_EQ(false, ex.Empty());
30*d35b42f2SJonas Devlieghere ASSERT_EQ(kInitMiscString.size(), ex.GetBytesLeft());
31b9739d40SPavel Labath ASSERT_EQ(kInitMiscString[0], *ex.Peek());
32719ec93aSZachary Turner }
33719ec93aSZachary Turner
TEST_F(StringExtractorTest,DecodeHexU8_Underflow)34b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_Underflow) {
35*d35b42f2SJonas Devlieghere llvm::StringRef kEmptyString = "";
36719ec93aSZachary Turner StringExtractor ex(kEmptyString);
37719ec93aSZachary Turner
38719ec93aSZachary Turner ASSERT_EQ(-1, ex.DecodeHexU8());
39719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
403dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetFilePos());
41719ec93aSZachary Turner ASSERT_EQ(true, ex.Empty());
423dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetBytesLeft());
43b9739d40SPavel Labath ASSERT_EQ(nullptr, ex.Peek());
44719ec93aSZachary Turner }
45719ec93aSZachary Turner
TEST_F(StringExtractorTest,DecodeHexU8_Underflow2)46b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_Underflow2) {
47*d35b42f2SJonas Devlieghere StringExtractor ex("1");
48719ec93aSZachary Turner
49719ec93aSZachary Turner ASSERT_EQ(-1, ex.DecodeHexU8());
50719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
513dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetFilePos());
523dfb86b6SDavid Blaikie ASSERT_EQ(1u, ex.GetBytesLeft());
53b9739d40SPavel Labath ASSERT_EQ('1', *ex.Peek());
54719ec93aSZachary Turner }
55719ec93aSZachary Turner
TEST_F(StringExtractorTest,DecodeHexU8_InvalidHex)56b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_InvalidHex) {
57*d35b42f2SJonas Devlieghere llvm::StringRef kInvalidHex = "xa";
58719ec93aSZachary Turner StringExtractor ex(kInvalidHex);
59719ec93aSZachary Turner
60719ec93aSZachary Turner ASSERT_EQ(-1, ex.DecodeHexU8());
61719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
623dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetFilePos());
633dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetBytesLeft());
64b9739d40SPavel Labath ASSERT_EQ('x', *ex.Peek());
65719ec93aSZachary Turner }
66719ec93aSZachary Turner
TEST_F(StringExtractorTest,DecodeHexU8_InvalidHex2)67b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_InvalidHex2) {
68*d35b42f2SJonas Devlieghere llvm::StringRef kInvalidHex = "ax";
69719ec93aSZachary Turner StringExtractor ex(kInvalidHex);
70719ec93aSZachary Turner
71719ec93aSZachary Turner ASSERT_EQ(-1, ex.DecodeHexU8());
72719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
733dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetFilePos());
743dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetBytesLeft());
75b9739d40SPavel Labath ASSERT_EQ('a', *ex.Peek());
76719ec93aSZachary Turner }
77719ec93aSZachary Turner
TEST_F(StringExtractorTest,DecodeHexU8_Exact)78b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_Exact) {
79*d35b42f2SJonas Devlieghere llvm::StringRef kValidHexPair = "12";
80719ec93aSZachary Turner StringExtractor ex(kValidHexPair);
81719ec93aSZachary Turner
82719ec93aSZachary Turner ASSERT_EQ(0x12, ex.DecodeHexU8());
83719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
843dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetFilePos());
853dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetBytesLeft());
86b9739d40SPavel Labath ASSERT_EQ(nullptr, ex.Peek());
87719ec93aSZachary Turner }
88719ec93aSZachary Turner
TEST_F(StringExtractorTest,DecodeHexU8_Extra)89b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_Extra) {
90*d35b42f2SJonas Devlieghere llvm::StringRef kValidHexPair = "1234";
91719ec93aSZachary Turner StringExtractor ex(kValidHexPair);
92719ec93aSZachary Turner
93719ec93aSZachary Turner ASSERT_EQ(0x12, ex.DecodeHexU8());
94719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
953dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetFilePos());
963dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetBytesLeft());
97b9739d40SPavel Labath ASSERT_EQ('3', *ex.Peek());
98719ec93aSZachary Turner }
99719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexU8_Underflow)100b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Underflow) {
101*d35b42f2SJonas Devlieghere llvm::StringRef kEmptyString = "";
102719ec93aSZachary Turner StringExtractor ex(kEmptyString);
103719ec93aSZachary Turner
104719ec93aSZachary Turner ASSERT_EQ(0xab, ex.GetHexU8(0xab));
105719ec93aSZachary Turner ASSERT_EQ(false, ex.IsGood());
106719ec93aSZachary Turner ASSERT_EQ(UINT64_MAX, ex.GetFilePos());
107719ec93aSZachary Turner ASSERT_EQ(true, ex.Empty());
1083dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetBytesLeft());
109b9739d40SPavel Labath ASSERT_EQ(nullptr, ex.Peek());
110719ec93aSZachary Turner }
111719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexU8_Underflow2)112b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Underflow2) {
113*d35b42f2SJonas Devlieghere llvm::StringRef kOneNibble = "1";
114719ec93aSZachary Turner StringExtractor ex(kOneNibble);
115719ec93aSZachary Turner
116719ec93aSZachary Turner ASSERT_EQ(0xbc, ex.GetHexU8(0xbc));
117719ec93aSZachary Turner ASSERT_EQ(false, ex.IsGood());
118719ec93aSZachary Turner ASSERT_EQ(UINT64_MAX, ex.GetFilePos());
1193dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetBytesLeft());
120b9739d40SPavel Labath ASSERT_EQ(nullptr, ex.Peek());
121719ec93aSZachary Turner }
122719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexU8_InvalidHex)123b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_InvalidHex) {
124*d35b42f2SJonas Devlieghere llvm::StringRef kInvalidHex = "xx";
125719ec93aSZachary Turner StringExtractor ex(kInvalidHex);
126719ec93aSZachary Turner
127719ec93aSZachary Turner ASSERT_EQ(0xcd, ex.GetHexU8(0xcd));
128719ec93aSZachary Turner ASSERT_EQ(false, ex.IsGood());
129719ec93aSZachary Turner ASSERT_EQ(UINT64_MAX, ex.GetFilePos());
1303dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetBytesLeft());
131b9739d40SPavel Labath ASSERT_EQ(nullptr, ex.Peek());
132719ec93aSZachary Turner }
133719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexU8_Exact)134b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Exact) {
135*d35b42f2SJonas Devlieghere llvm::StringRef kValidHexPair = "12";
136719ec93aSZachary Turner StringExtractor ex(kValidHexPair);
137719ec93aSZachary Turner
138719ec93aSZachary Turner ASSERT_EQ(0x12, ex.GetHexU8(0x12));
139719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
1403dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetFilePos());
1413dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetBytesLeft());
142b9739d40SPavel Labath ASSERT_EQ(nullptr, ex.Peek());
143719ec93aSZachary Turner }
144719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexU8_Extra)145b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Extra) {
146*d35b42f2SJonas Devlieghere llvm::StringRef kValidHexPair = "1234";
147719ec93aSZachary Turner StringExtractor ex(kValidHexPair);
148719ec93aSZachary Turner
149719ec93aSZachary Turner ASSERT_EQ(0x12, ex.GetHexU8(0x12));
150719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
1513dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetFilePos());
1523dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetBytesLeft());
153b9739d40SPavel Labath ASSERT_EQ('3', *ex.Peek());
154719ec93aSZachary Turner }
155719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexU8_Underflow_NoEof)156b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Underflow_NoEof) {
157*d35b42f2SJonas Devlieghere llvm::StringRef kEmptyString = "";
158719ec93aSZachary Turner StringExtractor ex(kEmptyString);
159719ec93aSZachary Turner const bool kSetEofOnFail = false;
160719ec93aSZachary Turner
161719ec93aSZachary Turner ASSERT_EQ(0xab, ex.GetHexU8(0xab, kSetEofOnFail));
162b9c1b51eSKate Stone ASSERT_EQ(false, ex.IsGood()); // this result seems inconsistent with
163b9c1b51eSKate Stone // kSetEofOnFail == false
164719ec93aSZachary Turner ASSERT_EQ(UINT64_MAX, ex.GetFilePos());
165719ec93aSZachary Turner ASSERT_EQ(true, ex.Empty());
1663dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetBytesLeft());
167b9739d40SPavel Labath ASSERT_EQ(nullptr, ex.Peek());
168719ec93aSZachary Turner }
169719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexU8_Underflow2_NoEof)170b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Underflow2_NoEof) {
171*d35b42f2SJonas Devlieghere llvm::StringRef kOneNibble = "1";
172719ec93aSZachary Turner StringExtractor ex(kOneNibble);
173719ec93aSZachary Turner const bool kSetEofOnFail = false;
174719ec93aSZachary Turner
175719ec93aSZachary Turner ASSERT_EQ(0xbc, ex.GetHexU8(0xbc, kSetEofOnFail));
176719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
1773dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetFilePos());
1783dfb86b6SDavid Blaikie ASSERT_EQ(1u, ex.GetBytesLeft());
179b9739d40SPavel Labath ASSERT_EQ('1', *ex.Peek());
180719ec93aSZachary Turner }
181719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexU8_InvalidHex_NoEof)182b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_InvalidHex_NoEof) {
183*d35b42f2SJonas Devlieghere llvm::StringRef kInvalidHex = "xx";
184719ec93aSZachary Turner StringExtractor ex(kInvalidHex);
185719ec93aSZachary Turner const bool kSetEofOnFail = false;
186719ec93aSZachary Turner
187719ec93aSZachary Turner ASSERT_EQ(0xcd, ex.GetHexU8(0xcd, kSetEofOnFail));
188719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
1893dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetFilePos());
1903dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetBytesLeft());
191b9739d40SPavel Labath ASSERT_EQ('x', *ex.Peek());
192719ec93aSZachary Turner }
193719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexU8_Exact_NoEof)194b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Exact_NoEof) {
195*d35b42f2SJonas Devlieghere llvm::StringRef kValidHexPair = "12";
196719ec93aSZachary Turner StringExtractor ex(kValidHexPair);
197719ec93aSZachary Turner const bool kSetEofOnFail = false;
198719ec93aSZachary Turner
199719ec93aSZachary Turner ASSERT_EQ(0x12, ex.GetHexU8(0x12, kSetEofOnFail));
200719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
2013dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetFilePos());
2023dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetBytesLeft());
203b9739d40SPavel Labath ASSERT_EQ(nullptr, ex.Peek());
204719ec93aSZachary Turner }
205719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexU8_Extra_NoEof)206b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Extra_NoEof) {
207*d35b42f2SJonas Devlieghere llvm::StringRef kValidHexPair = "1234";
208719ec93aSZachary Turner StringExtractor ex(kValidHexPair);
209719ec93aSZachary Turner const bool kSetEofOnFail = false;
210719ec93aSZachary Turner
211719ec93aSZachary Turner ASSERT_EQ(0x12, ex.GetHexU8(0x12, kSetEofOnFail));
212719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
2133dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetFilePos());
2143dfb86b6SDavid Blaikie ASSERT_EQ(2u, ex.GetBytesLeft());
215b9739d40SPavel Labath ASSERT_EQ('3', *ex.Peek());
216719ec93aSZachary Turner }
217719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytes)218b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes) {
219*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";
220719ec93aSZachary Turner const size_t kValidHexPairs = 8;
221719ec93aSZachary Turner StringExtractor ex(kHexEncodedBytes);
222719ec93aSZachary Turner
223719ec93aSZachary Turner uint8_t dst[kValidHexPairs];
224d08f09c1SZachary Turner ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));
225719ec93aSZachary Turner EXPECT_EQ(0xab, dst[0]);
226719ec93aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
227719ec93aSZachary Turner EXPECT_EQ(0xef, dst[2]);
228719ec93aSZachary Turner EXPECT_EQ(0x01, dst[3]);
229719ec93aSZachary Turner EXPECT_EQ(0x23, dst[4]);
230719ec93aSZachary Turner EXPECT_EQ(0x45, dst[5]);
231719ec93aSZachary Turner EXPECT_EQ(0x67, dst[6]);
232719ec93aSZachary Turner EXPECT_EQ(0x89, dst[7]);
233719ec93aSZachary Turner
234719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
235719ec93aSZachary Turner ASSERT_EQ(2 * kValidHexPairs, ex.GetFilePos());
236719ec93aSZachary Turner ASSERT_EQ(false, ex.Empty());
2373dfb86b6SDavid Blaikie ASSERT_EQ(4u, ex.GetBytesLeft());
238b9739d40SPavel Labath ASSERT_EQ('x', *ex.Peek());
239719ec93aSZachary Turner }
240719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytes_FullString)241b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes_FullString) {
242*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef0123456789";
243eb666b7aSZachary Turner const size_t kValidHexPairs = 8;
244eb666b7aSZachary Turner StringExtractor ex(kHexEncodedBytes);
245eb666b7aSZachary Turner
246eb666b7aSZachary Turner uint8_t dst[kValidHexPairs];
247eb666b7aSZachary Turner ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));
248eb666b7aSZachary Turner EXPECT_EQ(0xab, dst[0]);
249eb666b7aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
250eb666b7aSZachary Turner EXPECT_EQ(0xef, dst[2]);
251eb666b7aSZachary Turner EXPECT_EQ(0x01, dst[3]);
252eb666b7aSZachary Turner EXPECT_EQ(0x23, dst[4]);
253eb666b7aSZachary Turner EXPECT_EQ(0x45, dst[5]);
254eb666b7aSZachary Turner EXPECT_EQ(0x67, dst[6]);
255eb666b7aSZachary Turner EXPECT_EQ(0x89, dst[7]);
256eb666b7aSZachary Turner }
257eb666b7aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytes_OddPair)258b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes_OddPair) {
259*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef012345678w";
260eb666b7aSZachary Turner const size_t kValidHexPairs = 7;
261eb666b7aSZachary Turner StringExtractor ex(kHexEncodedBytes);
262eb666b7aSZachary Turner
263eb666b7aSZachary Turner uint8_t dst[8];
264eb666b7aSZachary Turner ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));
265eb666b7aSZachary Turner EXPECT_EQ(0xab, dst[0]);
266eb666b7aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
267eb666b7aSZachary Turner EXPECT_EQ(0xef, dst[2]);
268eb666b7aSZachary Turner EXPECT_EQ(0x01, dst[3]);
269eb666b7aSZachary Turner EXPECT_EQ(0x23, dst[4]);
270eb666b7aSZachary Turner EXPECT_EQ(0x45, dst[5]);
271eb666b7aSZachary Turner EXPECT_EQ(0x67, dst[6]);
272eb666b7aSZachary Turner
273eb666b7aSZachary Turner // This one should be invalid
274eb666b7aSZachary Turner EXPECT_EQ(0xde, dst[7]);
275eb666b7aSZachary Turner }
276eb666b7aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytes_OddPair2)277b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes_OddPair2) {
278*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef012345678";
279eb666b7aSZachary Turner const size_t kValidHexPairs = 7;
280eb666b7aSZachary Turner StringExtractor ex(kHexEncodedBytes);
281eb666b7aSZachary Turner
282eb666b7aSZachary Turner uint8_t dst[8];
283eb666b7aSZachary Turner ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));
284eb666b7aSZachary Turner EXPECT_EQ(0xab, dst[0]);
285eb666b7aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
286eb666b7aSZachary Turner EXPECT_EQ(0xef, dst[2]);
287eb666b7aSZachary Turner EXPECT_EQ(0x01, dst[3]);
288eb666b7aSZachary Turner EXPECT_EQ(0x23, dst[4]);
289eb666b7aSZachary Turner EXPECT_EQ(0x45, dst[5]);
290eb666b7aSZachary Turner EXPECT_EQ(0x67, dst[6]);
291eb666b7aSZachary Turner
292eb666b7aSZachary Turner EXPECT_EQ(0xde, dst[7]);
293eb666b7aSZachary Turner }
294eb666b7aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytes_Underflow)295b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes_Underflow) {
296*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";
297719ec93aSZachary Turner const size_t kValidHexPairs = 8;
298719ec93aSZachary Turner StringExtractor ex(kHexEncodedBytes);
299719ec93aSZachary Turner
300719ec93aSZachary Turner uint8_t dst[12];
301d08f09c1SZachary Turner ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));
302719ec93aSZachary Turner EXPECT_EQ(0xab, dst[0]);
303719ec93aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
304719ec93aSZachary Turner EXPECT_EQ(0xef, dst[2]);
305719ec93aSZachary Turner EXPECT_EQ(0x01, dst[3]);
306719ec93aSZachary Turner EXPECT_EQ(0x23, dst[4]);
307719ec93aSZachary Turner EXPECT_EQ(0x45, dst[5]);
308719ec93aSZachary Turner EXPECT_EQ(0x67, dst[6]);
309719ec93aSZachary Turner EXPECT_EQ(0x89, dst[7]);
310719ec93aSZachary Turner // these bytes should be filled with fail_fill_value 0xde
311719ec93aSZachary Turner EXPECT_EQ(0xde, dst[8]);
312719ec93aSZachary Turner EXPECT_EQ(0xde, dst[9]);
313719ec93aSZachary Turner EXPECT_EQ(0xde, dst[10]);
314719ec93aSZachary Turner EXPECT_EQ(0xde, dst[11]);
315719ec93aSZachary Turner
316719ec93aSZachary Turner ASSERT_EQ(false, ex.IsGood());
317719ec93aSZachary Turner ASSERT_EQ(UINT64_MAX, ex.GetFilePos());
318719ec93aSZachary Turner ASSERT_EQ(false, ex.Empty());
3193dfb86b6SDavid Blaikie ASSERT_EQ(0u, ex.GetBytesLeft());
320248a1305SKonrad Kleine ASSERT_EQ(nullptr, ex.Peek());
321719ec93aSZachary Turner }
322719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytes_Partial)323b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes_Partial) {
324*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";
325719ec93aSZachary Turner const size_t kReadBytes = 4;
326719ec93aSZachary Turner StringExtractor ex(kHexEncodedBytes);
327719ec93aSZachary Turner
328719ec93aSZachary Turner uint8_t dst[12];
329719ec93aSZachary Turner memset(dst, 0xab, sizeof(dst));
330b9c1b51eSKate Stone ASSERT_EQ(
331b9c1b51eSKate Stone kReadBytes,
332b9c1b51eSKate Stone ex.GetHexBytes(llvm::MutableArrayRef<uint8_t>(dst, kReadBytes), 0xde));
333719ec93aSZachary Turner EXPECT_EQ(0xab, dst[0]);
334719ec93aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
335719ec93aSZachary Turner EXPECT_EQ(0xef, dst[2]);
336719ec93aSZachary Turner EXPECT_EQ(0x01, dst[3]);
337719ec93aSZachary Turner // these bytes should be unchanged
338719ec93aSZachary Turner EXPECT_EQ(0xab, dst[4]);
339719ec93aSZachary Turner EXPECT_EQ(0xab, dst[5]);
340719ec93aSZachary Turner EXPECT_EQ(0xab, dst[6]);
341719ec93aSZachary Turner EXPECT_EQ(0xab, dst[7]);
342719ec93aSZachary Turner EXPECT_EQ(0xab, dst[8]);
343719ec93aSZachary Turner EXPECT_EQ(0xab, dst[9]);
344719ec93aSZachary Turner EXPECT_EQ(0xab, dst[10]);
345719ec93aSZachary Turner EXPECT_EQ(0xab, dst[11]);
346719ec93aSZachary Turner
347719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
348719ec93aSZachary Turner ASSERT_EQ(kReadBytes * 2, ex.GetFilePos());
349719ec93aSZachary Turner ASSERT_EQ(false, ex.Empty());
3503dfb86b6SDavid Blaikie ASSERT_EQ(12u, ex.GetBytesLeft());
351b9739d40SPavel Labath ASSERT_EQ('2', *ex.Peek());
352719ec93aSZachary Turner }
353719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytesAvail)354b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail) {
355*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";
356719ec93aSZachary Turner const size_t kValidHexPairs = 8;
357719ec93aSZachary Turner StringExtractor ex(kHexEncodedBytes);
358719ec93aSZachary Turner
359719ec93aSZachary Turner uint8_t dst[kValidHexPairs];
360d08f09c1SZachary Turner ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));
361719ec93aSZachary Turner EXPECT_EQ(0xab, dst[0]);
362719ec93aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
363719ec93aSZachary Turner EXPECT_EQ(0xef, dst[2]);
364719ec93aSZachary Turner EXPECT_EQ(0x01, dst[3]);
365719ec93aSZachary Turner EXPECT_EQ(0x23, dst[4]);
366719ec93aSZachary Turner EXPECT_EQ(0x45, dst[5]);
367719ec93aSZachary Turner EXPECT_EQ(0x67, dst[6]);
368719ec93aSZachary Turner EXPECT_EQ(0x89, dst[7]);
369719ec93aSZachary Turner
370719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
371719ec93aSZachary Turner ASSERT_EQ(2 * kValidHexPairs, ex.GetFilePos());
372719ec93aSZachary Turner ASSERT_EQ(false, ex.Empty());
3733dfb86b6SDavid Blaikie ASSERT_EQ(4u, ex.GetBytesLeft());
374b9739d40SPavel Labath ASSERT_EQ('x', *ex.Peek());
375719ec93aSZachary Turner }
376719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytesAvail_FullString)377b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail_FullString) {
378*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef0123456789";
379eb666b7aSZachary Turner const size_t kValidHexPairs = 8;
380eb666b7aSZachary Turner StringExtractor ex(kHexEncodedBytes);
381eb666b7aSZachary Turner
382eb666b7aSZachary Turner uint8_t dst[kValidHexPairs];
383eb666b7aSZachary Turner ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));
384eb666b7aSZachary Turner EXPECT_EQ(0xab, dst[0]);
385eb666b7aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
386eb666b7aSZachary Turner EXPECT_EQ(0xef, dst[2]);
387eb666b7aSZachary Turner EXPECT_EQ(0x01, dst[3]);
388eb666b7aSZachary Turner EXPECT_EQ(0x23, dst[4]);
389eb666b7aSZachary Turner EXPECT_EQ(0x45, dst[5]);
390eb666b7aSZachary Turner EXPECT_EQ(0x67, dst[6]);
391eb666b7aSZachary Turner EXPECT_EQ(0x89, dst[7]);
392eb666b7aSZachary Turner }
393eb666b7aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytesAvail_OddPair)394b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail_OddPair) {
395*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef012345678w";
396eb666b7aSZachary Turner const size_t kValidHexPairs = 7;
397eb666b7aSZachary Turner StringExtractor ex(kHexEncodedBytes);
398eb666b7aSZachary Turner
399eb666b7aSZachary Turner uint8_t dst[8];
400eb666b7aSZachary Turner ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));
401eb666b7aSZachary Turner EXPECT_EQ(0xab, dst[0]);
402eb666b7aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
403eb666b7aSZachary Turner EXPECT_EQ(0xef, dst[2]);
404eb666b7aSZachary Turner EXPECT_EQ(0x01, dst[3]);
405eb666b7aSZachary Turner EXPECT_EQ(0x23, dst[4]);
406eb666b7aSZachary Turner EXPECT_EQ(0x45, dst[5]);
407eb666b7aSZachary Turner EXPECT_EQ(0x67, dst[6]);
408eb666b7aSZachary Turner }
409eb666b7aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytesAvail_OddPair2)410b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail_OddPair2) {
411*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef012345678";
412eb666b7aSZachary Turner const size_t kValidHexPairs = 7;
413eb666b7aSZachary Turner StringExtractor ex(kHexEncodedBytes);
414eb666b7aSZachary Turner
415eb666b7aSZachary Turner uint8_t dst[8];
416eb666b7aSZachary Turner ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));
417eb666b7aSZachary Turner EXPECT_EQ(0xab, dst[0]);
418eb666b7aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
419eb666b7aSZachary Turner EXPECT_EQ(0xef, dst[2]);
420eb666b7aSZachary Turner EXPECT_EQ(0x01, dst[3]);
421eb666b7aSZachary Turner EXPECT_EQ(0x23, dst[4]);
422eb666b7aSZachary Turner EXPECT_EQ(0x45, dst[5]);
423eb666b7aSZachary Turner EXPECT_EQ(0x67, dst[6]);
424eb666b7aSZachary Turner }
425eb666b7aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytesAvail_Underflow)426b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail_Underflow) {
427*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";
428719ec93aSZachary Turner const size_t kValidHexPairs = 8;
429719ec93aSZachary Turner StringExtractor ex(kHexEncodedBytes);
430719ec93aSZachary Turner
431719ec93aSZachary Turner uint8_t dst[12];
432719ec93aSZachary Turner memset(dst, 0xef, sizeof(dst));
433d08f09c1SZachary Turner ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));
434719ec93aSZachary Turner EXPECT_EQ(0xab, dst[0]);
435719ec93aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
436719ec93aSZachary Turner EXPECT_EQ(0xef, dst[2]);
437719ec93aSZachary Turner EXPECT_EQ(0x01, dst[3]);
438719ec93aSZachary Turner EXPECT_EQ(0x23, dst[4]);
439719ec93aSZachary Turner EXPECT_EQ(0x45, dst[5]);
440719ec93aSZachary Turner EXPECT_EQ(0x67, dst[6]);
441719ec93aSZachary Turner EXPECT_EQ(0x89, dst[7]);
442719ec93aSZachary Turner // these bytes should be unchanged
443719ec93aSZachary Turner EXPECT_EQ(0xef, dst[8]);
444719ec93aSZachary Turner EXPECT_EQ(0xef, dst[9]);
445719ec93aSZachary Turner EXPECT_EQ(0xef, dst[10]);
446719ec93aSZachary Turner EXPECT_EQ(0xef, dst[11]);
447719ec93aSZachary Turner
448719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
449719ec93aSZachary Turner ASSERT_EQ(kValidHexPairs * 2, ex.GetFilePos());
450719ec93aSZachary Turner ASSERT_EQ(false, ex.Empty());
4513dfb86b6SDavid Blaikie ASSERT_EQ(4u, ex.GetBytesLeft());
452b9739d40SPavel Labath ASSERT_EQ('x', *ex.Peek());
453719ec93aSZachary Turner }
454719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetHexBytesAvail_Partial)455b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail_Partial) {
456*d35b42f2SJonas Devlieghere llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";
457719ec93aSZachary Turner const size_t kReadBytes = 4;
458719ec93aSZachary Turner StringExtractor ex(kHexEncodedBytes);
459719ec93aSZachary Turner
460719ec93aSZachary Turner uint8_t dst[12];
461719ec93aSZachary Turner memset(dst, 0xab, sizeof(dst));
462b9c1b51eSKate Stone ASSERT_EQ(kReadBytes, ex.GetHexBytesAvail(
463b9c1b51eSKate Stone llvm::MutableArrayRef<uint8_t>(dst, kReadBytes)));
464719ec93aSZachary Turner EXPECT_EQ(0xab, dst[0]);
465719ec93aSZachary Turner EXPECT_EQ(0xcd, dst[1]);
466719ec93aSZachary Turner EXPECT_EQ(0xef, dst[2]);
467719ec93aSZachary Turner EXPECT_EQ(0x01, dst[3]);
468719ec93aSZachary Turner // these bytes should be unchanged
469719ec93aSZachary Turner EXPECT_EQ(0xab, dst[4]);
470719ec93aSZachary Turner EXPECT_EQ(0xab, dst[5]);
471719ec93aSZachary Turner EXPECT_EQ(0xab, dst[6]);
472719ec93aSZachary Turner EXPECT_EQ(0xab, dst[7]);
473719ec93aSZachary Turner EXPECT_EQ(0xab, dst[8]);
474719ec93aSZachary Turner EXPECT_EQ(0xab, dst[9]);
475719ec93aSZachary Turner EXPECT_EQ(0xab, dst[10]);
476719ec93aSZachary Turner EXPECT_EQ(0xab, dst[11]);
477719ec93aSZachary Turner
478719ec93aSZachary Turner ASSERT_EQ(true, ex.IsGood());
479719ec93aSZachary Turner ASSERT_EQ(kReadBytes * 2, ex.GetFilePos());
480719ec93aSZachary Turner ASSERT_EQ(false, ex.Empty());
4813dfb86b6SDavid Blaikie ASSERT_EQ(12u, ex.GetBytesLeft());
482b9739d40SPavel Labath ASSERT_EQ('2', *ex.Peek());
483719ec93aSZachary Turner }
484719ec93aSZachary Turner
TEST_F(StringExtractorTest,GetNameColonValueSuccess)485b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetNameColonValueSuccess) {
486*d35b42f2SJonas Devlieghere llvm::StringRef kNameColonPairs = "key1:value1;key2:value2;";
48705c4cebaSZachary Turner StringExtractor ex(kNameColonPairs);
488719ec93aSZachary Turner
48954695a33SZachary Turner llvm::StringRef name;
49054695a33SZachary Turner llvm::StringRef value;
49105c4cebaSZachary Turner EXPECT_TRUE(ex.GetNameColonValue(name, value));
49205c4cebaSZachary Turner EXPECT_EQ("key1", name);
49305c4cebaSZachary Turner EXPECT_EQ("value1", value);
49405c4cebaSZachary Turner EXPECT_TRUE(ex.GetNameColonValue(name, value));
49505c4cebaSZachary Turner EXPECT_EQ("key2", name);
49605c4cebaSZachary Turner EXPECT_EQ("value2", value);
497b69c3169SJustin Bogner EXPECT_EQ(0u, ex.GetBytesLeft());
49805c4cebaSZachary Turner }
49905c4cebaSZachary Turner
TEST_F(StringExtractorTest,GetNameColonValueContainsColon)500b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetNameColonValueContainsColon) {
501*d35b42f2SJonas Devlieghere llvm::StringRef kNameColonPairs = "key1:value1:value2;key2:value3;";
50205c4cebaSZachary Turner StringExtractor ex(kNameColonPairs);
50305c4cebaSZachary Turner
50454695a33SZachary Turner llvm::StringRef name;
50554695a33SZachary Turner llvm::StringRef value;
50605c4cebaSZachary Turner EXPECT_TRUE(ex.GetNameColonValue(name, value));
50705c4cebaSZachary Turner EXPECT_EQ("key1", name);
50805c4cebaSZachary Turner EXPECT_EQ("value1:value2", value);
50905c4cebaSZachary Turner EXPECT_TRUE(ex.GetNameColonValue(name, value));
51005c4cebaSZachary Turner EXPECT_EQ("key2", name);
51105c4cebaSZachary Turner EXPECT_EQ("value3", value);
512b69c3169SJustin Bogner EXPECT_EQ(0u, ex.GetBytesLeft());
51305c4cebaSZachary Turner }
51405c4cebaSZachary Turner
TEST_F(StringExtractorTest,GetNameColonValueNoSemicolon)515b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetNameColonValueNoSemicolon) {
516*d35b42f2SJonas Devlieghere llvm::StringRef kNameColonPairs = "key1:value1";
51705c4cebaSZachary Turner StringExtractor ex(kNameColonPairs);
51805c4cebaSZachary Turner
51954695a33SZachary Turner llvm::StringRef name;
52054695a33SZachary Turner llvm::StringRef value;
52105c4cebaSZachary Turner EXPECT_FALSE(ex.GetNameColonValue(name, value));
522b69c3169SJustin Bogner EXPECT_EQ(0u, ex.GetBytesLeft());
52305c4cebaSZachary Turner }
52405c4cebaSZachary Turner
TEST_F(StringExtractorTest,GetNameColonValueNoColon)525b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetNameColonValueNoColon) {
526*d35b42f2SJonas Devlieghere llvm::StringRef kNameColonPairs = "key1value1;";
52705c4cebaSZachary Turner StringExtractor ex(kNameColonPairs);
52805c4cebaSZachary Turner
52954695a33SZachary Turner llvm::StringRef name;
53054695a33SZachary Turner llvm::StringRef value;
53105c4cebaSZachary Turner EXPECT_FALSE(ex.GetNameColonValue(name, value));
532b69c3169SJustin Bogner EXPECT_EQ(0u, ex.GetBytesLeft());
53305c4cebaSZachary Turner }
534eb666b7aSZachary Turner
TEST_F(StringExtractorTest,GetU32LittleEndian)535b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetU32LittleEndian) {
53690999010SZachary Turner StringExtractor ex("");
537b69c3169SJustin Bogner EXPECT_EQ(0x0ull, ex.GetHexMaxU32(true, 0));
538eb666b7aSZachary Turner
53990999010SZachary Turner ex.Reset("0");
540b69c3169SJustin Bogner EXPECT_EQ(0x0ull, ex.GetHexMaxU32(true, 1));
541eb666b7aSZachary Turner
54290999010SZachary Turner ex.Reset("1");
543b69c3169SJustin Bogner EXPECT_EQ(0x1ull, ex.GetHexMaxU32(true, 0));
54490999010SZachary Turner
54590999010SZachary Turner ex.Reset("01");
546b69c3169SJustin Bogner EXPECT_EQ(0x1ull, ex.GetHexMaxU32(true, 0));
54790999010SZachary Turner
54890999010SZachary Turner ex.Reset("001");
549b69c3169SJustin Bogner EXPECT_EQ(0x100ull, ex.GetHexMaxU32(true, 0));
55090999010SZachary Turner
55190999010SZachary Turner ex.Reset("12");
552b69c3169SJustin Bogner EXPECT_EQ(0x12ull, ex.GetHexMaxU32(true, 0));
55390999010SZachary Turner
55490999010SZachary Turner ex.Reset("123");
555b69c3169SJustin Bogner EXPECT_EQ(0x312ull, ex.GetHexMaxU32(true, 0));
55690999010SZachary Turner
55790999010SZachary Turner ex.Reset("1203");
558b69c3169SJustin Bogner EXPECT_EQ(0x312ull, ex.GetHexMaxU32(true, 0));
55990999010SZachary Turner
56090999010SZachary Turner ex.Reset("1234");
561b69c3169SJustin Bogner EXPECT_EQ(0x3412ull, ex.GetHexMaxU32(true, 0));
56290999010SZachary Turner
56390999010SZachary Turner ex.Reset("12340");
564b69c3169SJustin Bogner EXPECT_EQ(0x3412ull, ex.GetHexMaxU32(true, 0));
56590999010SZachary Turner
56690999010SZachary Turner ex.Reset("123400");
567b69c3169SJustin Bogner EXPECT_EQ(0x3412ull, ex.GetHexMaxU32(true, 0));
56890999010SZachary Turner
56990999010SZachary Turner ex.Reset("12345670");
570b69c3169SJustin Bogner EXPECT_EQ(0x70563412ull, ex.GetHexMaxU32(true, 0));
57190999010SZachary Turner
57290999010SZachary Turner ex.Reset("123456701");
573b69c3169SJustin Bogner EXPECT_EQ(0ull, ex.GetHexMaxU32(true, 0));
574eb666b7aSZachary Turner }
575eb666b7aSZachary Turner
TEST_F(StringExtractorTest,GetU32BigEndian)576b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetU32BigEndian) {
57790999010SZachary Turner StringExtractor ex("");
578b69c3169SJustin Bogner EXPECT_EQ(0x0ull, ex.GetHexMaxU32(false, 0));
579eb666b7aSZachary Turner
58090999010SZachary Turner ex.Reset("0");
581b69c3169SJustin Bogner EXPECT_EQ(0x0ull, ex.GetHexMaxU32(false, 1));
582eb666b7aSZachary Turner
58390999010SZachary Turner ex.Reset("1");
584b69c3169SJustin Bogner EXPECT_EQ(0x1ull, ex.GetHexMaxU32(false, 0));
58590999010SZachary Turner
58690999010SZachary Turner ex.Reset("01");
587b69c3169SJustin Bogner EXPECT_EQ(0x1ull, ex.GetHexMaxU32(false, 0));
58890999010SZachary Turner
58990999010SZachary Turner ex.Reset("001");
590b69c3169SJustin Bogner EXPECT_EQ(0x1ull, ex.GetHexMaxU32(false, 0));
59190999010SZachary Turner
59290999010SZachary Turner ex.Reset("12");
593b69c3169SJustin Bogner EXPECT_EQ(0x12ull, ex.GetHexMaxU32(false, 0));
59490999010SZachary Turner
59590999010SZachary Turner ex.Reset("123");
596b69c3169SJustin Bogner EXPECT_EQ(0x123ull, ex.GetHexMaxU32(false, 0));
59790999010SZachary Turner
59890999010SZachary Turner ex.Reset("1203");
599b69c3169SJustin Bogner EXPECT_EQ(0x1203ull, ex.GetHexMaxU32(false, 0));
60090999010SZachary Turner
60190999010SZachary Turner ex.Reset("1234");
602b69c3169SJustin Bogner EXPECT_EQ(0x1234ull, ex.GetHexMaxU32(false, 0));
60390999010SZachary Turner
60490999010SZachary Turner ex.Reset("12340");
605b69c3169SJustin Bogner EXPECT_EQ(0x12340ull, ex.GetHexMaxU32(false, 0));
60690999010SZachary Turner
60790999010SZachary Turner ex.Reset("123400");
608b69c3169SJustin Bogner EXPECT_EQ(0x123400ull, ex.GetHexMaxU32(false, 0));
60990999010SZachary Turner
61090999010SZachary Turner ex.Reset("12345670");
611b69c3169SJustin Bogner EXPECT_EQ(0x12345670ull, ex.GetHexMaxU32(false, 0));
61290999010SZachary Turner
61390999010SZachary Turner ex.Reset("123456700");
614b69c3169SJustin Bogner EXPECT_EQ(0ull, ex.GetHexMaxU32(false, 0));
615eb666b7aSZachary Turner }
616eb666b7aSZachary Turner
TEST_F(StringExtractorTest,GetU64LittleEndian)617b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetU64LittleEndian) {
61890999010SZachary Turner StringExtractor ex("");
619b69c3169SJustin Bogner EXPECT_EQ(0x0ull, ex.GetHexMaxU64(true, 0));
620eb666b7aSZachary Turner
62190999010SZachary Turner ex.Reset("0");
622b69c3169SJustin Bogner EXPECT_EQ(0x0ull, ex.GetHexMaxU64(true, 1));
62390999010SZachary Turner
62490999010SZachary Turner ex.Reset("1");
625b69c3169SJustin Bogner EXPECT_EQ(0x1ull, ex.GetHexMaxU64(true, 0));
62690999010SZachary Turner
62790999010SZachary Turner ex.Reset("01");
628b69c3169SJustin Bogner EXPECT_EQ(0x1ull, ex.GetHexMaxU64(true, 0));
62990999010SZachary Turner
63090999010SZachary Turner ex.Reset("001");
631b69c3169SJustin Bogner EXPECT_EQ(0x100ull, ex.GetHexMaxU64(true, 0));
63290999010SZachary Turner
63390999010SZachary Turner ex.Reset("12");
634b69c3169SJustin Bogner EXPECT_EQ(0x12ull, ex.GetHexMaxU64(true, 0));
63590999010SZachary Turner
63690999010SZachary Turner ex.Reset("123");
637b69c3169SJustin Bogner EXPECT_EQ(0x312ull, ex.GetHexMaxU64(true, 0));
63890999010SZachary Turner
63990999010SZachary Turner ex.Reset("1203");
640b69c3169SJustin Bogner EXPECT_EQ(0x312ull, ex.GetHexMaxU64(true, 0));
64190999010SZachary Turner
64290999010SZachary Turner ex.Reset("1234");
643b69c3169SJustin Bogner EXPECT_EQ(0x3412ull, ex.GetHexMaxU64(true, 0));
64490999010SZachary Turner
64590999010SZachary Turner ex.Reset("12340");
646b69c3169SJustin Bogner EXPECT_EQ(0x3412ull, ex.GetHexMaxU64(true, 0));
64790999010SZachary Turner
64890999010SZachary Turner ex.Reset("123400");
649b69c3169SJustin Bogner EXPECT_EQ(0x3412ull, ex.GetHexMaxU64(true, 0));
650eb666b7aSZachary Turner
651eb666b7aSZachary Turner ex.Reset("123456789ABCDEF0");
652eb666b7aSZachary Turner EXPECT_EQ(0xF0DEBC9A78563412ULL, ex.GetHexMaxU64(true, 0));
653eb666b7aSZachary Turner
65490999010SZachary Turner ex.Reset("123456789ABCDEF01");
655b69c3169SJustin Bogner EXPECT_EQ(0ull, ex.GetHexMaxU64(true, 0));
656eb666b7aSZachary Turner }
657eb666b7aSZachary Turner
TEST_F(StringExtractorTest,GetU64BigEndian)658b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetU64BigEndian) {
65990999010SZachary Turner StringExtractor ex("");
660b69c3169SJustin Bogner EXPECT_EQ(0x0ull, ex.GetHexMaxU64(false, 0));
661eb666b7aSZachary Turner
66290999010SZachary Turner ex.Reset("0");
663b69c3169SJustin Bogner EXPECT_EQ(0x0ull, ex.GetHexMaxU64(false, 1));
66490999010SZachary Turner
66590999010SZachary Turner ex.Reset("1");
666b69c3169SJustin Bogner EXPECT_EQ(0x1ull, ex.GetHexMaxU64(false, 0));
66790999010SZachary Turner
66890999010SZachary Turner ex.Reset("01");
669b69c3169SJustin Bogner EXPECT_EQ(0x1ull, ex.GetHexMaxU64(false, 0));
67090999010SZachary Turner
67190999010SZachary Turner ex.Reset("001");
672b69c3169SJustin Bogner EXPECT_EQ(0x1ull, ex.GetHexMaxU64(false, 0));
67390999010SZachary Turner
67490999010SZachary Turner ex.Reset("12");
675b69c3169SJustin Bogner EXPECT_EQ(0x12ull, ex.GetHexMaxU64(false, 0));
67690999010SZachary Turner
67790999010SZachary Turner ex.Reset("123");
678b69c3169SJustin Bogner EXPECT_EQ(0x123ull, ex.GetHexMaxU64(false, 0));
67990999010SZachary Turner
68090999010SZachary Turner ex.Reset("1203");
681b69c3169SJustin Bogner EXPECT_EQ(0x1203ull, ex.GetHexMaxU64(false, 0));
68290999010SZachary Turner
68390999010SZachary Turner ex.Reset("1234");
684b69c3169SJustin Bogner EXPECT_EQ(0x1234ull, ex.GetHexMaxU64(false, 0));
68590999010SZachary Turner
68690999010SZachary Turner ex.Reset("12340");
687b69c3169SJustin Bogner EXPECT_EQ(0x12340ull, ex.GetHexMaxU64(false, 0));
68890999010SZachary Turner
68990999010SZachary Turner ex.Reset("123400");
690b69c3169SJustin Bogner EXPECT_EQ(0x123400ull, ex.GetHexMaxU64(false, 0));
691eb666b7aSZachary Turner
692eb666b7aSZachary Turner ex.Reset("123456789ABCDEF0");
693eb666b7aSZachary Turner EXPECT_EQ(0x123456789ABCDEF0ULL, ex.GetHexMaxU64(false, 0));
694eb666b7aSZachary Turner
695eb666b7aSZachary Turner ex.Reset("123456789ABCDEF000");
696b69c3169SJustin Bogner EXPECT_EQ(0ull, ex.GetHexMaxU64(false, 0));
697eb666b7aSZachary Turner }
698