xref: /llvm-project/lldb/unittests/Utility/StringExtractorTest.cpp (revision b9c1b51e45b845debb76d8658edabca70ca56079)
1719ec93aSZachary Turner #include "gtest/gtest.h"
2*b9c1b51eSKate Stone #include <limits.h>
3719ec93aSZachary Turner 
428529f60SBruce Mitchener #include "lldb/Utility/StringExtractor.h"
5719ec93aSZachary Turner 
6*b9c1b51eSKate Stone namespace {
7*b9c1b51eSKate Stone class StringExtractorTest : public ::testing::Test {};
8719ec93aSZachary Turner }
9719ec93aSZachary Turner 
10*b9c1b51eSKate Stone TEST_F(StringExtractorTest, InitEmpty) {
11719ec93aSZachary Turner   const char kEmptyString[] = "";
12719ec93aSZachary Turner   StringExtractor ex(kEmptyString);
13719ec93aSZachary Turner 
14719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
153dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetFilePos());
16719ec93aSZachary Turner   ASSERT_STREQ(kEmptyString, ex.GetStringRef().c_str());
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 
22*b9c1b51eSKate Stone TEST_F(StringExtractorTest, InitMisc) {
23719ec93aSZachary Turner   const char kInitMiscString[] = "Hello, StringExtractor!";
24719ec93aSZachary Turner   StringExtractor ex(kInitMiscString);
25719ec93aSZachary Turner 
26719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
273dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetFilePos());
28719ec93aSZachary Turner   ASSERT_STREQ(kInitMiscString, ex.GetStringRef().c_str());
29719ec93aSZachary Turner   ASSERT_EQ(false, ex.Empty());
30719ec93aSZachary Turner   ASSERT_EQ(sizeof(kInitMiscString) - 1, ex.GetBytesLeft());
31b9739d40SPavel Labath   ASSERT_EQ(kInitMiscString[0], *ex.Peek());
32719ec93aSZachary Turner }
33719ec93aSZachary Turner 
34*b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_Underflow) {
35719ec93aSZachary Turner   const char 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 
46*b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_Underflow2) {
47719ec93aSZachary Turner   const char kEmptyString[] = "1";
48719ec93aSZachary Turner   StringExtractor ex(kEmptyString);
49719ec93aSZachary Turner 
50719ec93aSZachary Turner   ASSERT_EQ(-1, ex.DecodeHexU8());
51719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
523dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetFilePos());
533dfb86b6SDavid Blaikie   ASSERT_EQ(1u, ex.GetBytesLeft());
54b9739d40SPavel Labath   ASSERT_EQ('1', *ex.Peek());
55719ec93aSZachary Turner }
56719ec93aSZachary Turner 
57*b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_InvalidHex) {
58719ec93aSZachary Turner   const char kInvalidHex[] = "xa";
59719ec93aSZachary Turner   StringExtractor ex(kInvalidHex);
60719ec93aSZachary Turner 
61719ec93aSZachary Turner   ASSERT_EQ(-1, ex.DecodeHexU8());
62719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
633dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetFilePos());
643dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetBytesLeft());
65b9739d40SPavel Labath   ASSERT_EQ('x', *ex.Peek());
66719ec93aSZachary Turner }
67719ec93aSZachary Turner 
68*b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_InvalidHex2) {
69719ec93aSZachary Turner   const char kInvalidHex[] = "ax";
70719ec93aSZachary Turner   StringExtractor ex(kInvalidHex);
71719ec93aSZachary Turner 
72719ec93aSZachary Turner   ASSERT_EQ(-1, ex.DecodeHexU8());
73719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
743dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetFilePos());
753dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetBytesLeft());
76b9739d40SPavel Labath   ASSERT_EQ('a', *ex.Peek());
77719ec93aSZachary Turner }
78719ec93aSZachary Turner 
79*b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_Exact) {
80719ec93aSZachary Turner   const char kValidHexPair[] = "12";
81719ec93aSZachary Turner   StringExtractor ex(kValidHexPair);
82719ec93aSZachary Turner 
83719ec93aSZachary Turner   ASSERT_EQ(0x12, ex.DecodeHexU8());
84719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
853dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetFilePos());
863dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetBytesLeft());
87b9739d40SPavel Labath   ASSERT_EQ(nullptr, ex.Peek());
88719ec93aSZachary Turner }
89719ec93aSZachary Turner 
90*b9c1b51eSKate Stone TEST_F(StringExtractorTest, DecodeHexU8_Extra) {
91719ec93aSZachary Turner   const char kValidHexPair[] = "1234";
92719ec93aSZachary Turner   StringExtractor ex(kValidHexPair);
93719ec93aSZachary Turner 
94719ec93aSZachary Turner   ASSERT_EQ(0x12, ex.DecodeHexU8());
95719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
963dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetFilePos());
973dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetBytesLeft());
98b9739d40SPavel Labath   ASSERT_EQ('3', *ex.Peek());
99719ec93aSZachary Turner }
100719ec93aSZachary Turner 
101*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Underflow) {
102719ec93aSZachary Turner   const char kEmptyString[] = "";
103719ec93aSZachary Turner   StringExtractor ex(kEmptyString);
104719ec93aSZachary Turner 
105719ec93aSZachary Turner   ASSERT_EQ(0xab, ex.GetHexU8(0xab));
106719ec93aSZachary Turner   ASSERT_EQ(false, ex.IsGood());
107719ec93aSZachary Turner   ASSERT_EQ(UINT64_MAX, ex.GetFilePos());
108719ec93aSZachary Turner   ASSERT_EQ(true, ex.Empty());
1093dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetBytesLeft());
110b9739d40SPavel Labath   ASSERT_EQ(nullptr, ex.Peek());
111719ec93aSZachary Turner }
112719ec93aSZachary Turner 
113*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Underflow2) {
114719ec93aSZachary Turner   const char kOneNibble[] = "1";
115719ec93aSZachary Turner   StringExtractor ex(kOneNibble);
116719ec93aSZachary Turner 
117719ec93aSZachary Turner   ASSERT_EQ(0xbc, ex.GetHexU8(0xbc));
118719ec93aSZachary Turner   ASSERT_EQ(false, ex.IsGood());
119719ec93aSZachary Turner   ASSERT_EQ(UINT64_MAX, ex.GetFilePos());
1203dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetBytesLeft());
121b9739d40SPavel Labath   ASSERT_EQ(nullptr, ex.Peek());
122719ec93aSZachary Turner }
123719ec93aSZachary Turner 
124*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_InvalidHex) {
125719ec93aSZachary Turner   const char kInvalidHex[] = "xx";
126719ec93aSZachary Turner   StringExtractor ex(kInvalidHex);
127719ec93aSZachary Turner 
128719ec93aSZachary Turner   ASSERT_EQ(0xcd, ex.GetHexU8(0xcd));
129719ec93aSZachary Turner   ASSERT_EQ(false, ex.IsGood());
130719ec93aSZachary Turner   ASSERT_EQ(UINT64_MAX, ex.GetFilePos());
1313dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetBytesLeft());
132b9739d40SPavel Labath   ASSERT_EQ(nullptr, ex.Peek());
133719ec93aSZachary Turner }
134719ec93aSZachary Turner 
135*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Exact) {
136719ec93aSZachary Turner   const char kValidHexPair[] = "12";
137719ec93aSZachary Turner   StringExtractor ex(kValidHexPair);
138719ec93aSZachary Turner 
139719ec93aSZachary Turner   ASSERT_EQ(0x12, ex.GetHexU8(0x12));
140719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
1413dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetFilePos());
1423dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetBytesLeft());
143b9739d40SPavel Labath   ASSERT_EQ(nullptr, ex.Peek());
144719ec93aSZachary Turner }
145719ec93aSZachary Turner 
146*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Extra) {
147719ec93aSZachary Turner   const char kValidHexPair[] = "1234";
148719ec93aSZachary Turner   StringExtractor ex(kValidHexPair);
149719ec93aSZachary Turner 
150719ec93aSZachary Turner   ASSERT_EQ(0x12, ex.GetHexU8(0x12));
151719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
1523dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetFilePos());
1533dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetBytesLeft());
154b9739d40SPavel Labath   ASSERT_EQ('3', *ex.Peek());
155719ec93aSZachary Turner }
156719ec93aSZachary Turner 
157*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Underflow_NoEof) {
158719ec93aSZachary Turner   const char kEmptyString[] = "";
159719ec93aSZachary Turner   StringExtractor ex(kEmptyString);
160719ec93aSZachary Turner   const bool kSetEofOnFail = false;
161719ec93aSZachary Turner 
162719ec93aSZachary Turner   ASSERT_EQ(0xab, ex.GetHexU8(0xab, kSetEofOnFail));
163*b9c1b51eSKate Stone   ASSERT_EQ(false, ex.IsGood()); // this result seems inconsistent with
164*b9c1b51eSKate Stone                                  // kSetEofOnFail == false
165719ec93aSZachary Turner   ASSERT_EQ(UINT64_MAX, ex.GetFilePos());
166719ec93aSZachary Turner   ASSERT_EQ(true, ex.Empty());
1673dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetBytesLeft());
168b9739d40SPavel Labath   ASSERT_EQ(nullptr, ex.Peek());
169719ec93aSZachary Turner }
170719ec93aSZachary Turner 
171*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Underflow2_NoEof) {
172719ec93aSZachary Turner   const char kOneNibble[] = "1";
173719ec93aSZachary Turner   StringExtractor ex(kOneNibble);
174719ec93aSZachary Turner   const bool kSetEofOnFail = false;
175719ec93aSZachary Turner 
176719ec93aSZachary Turner   ASSERT_EQ(0xbc, ex.GetHexU8(0xbc, kSetEofOnFail));
177719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
1783dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetFilePos());
1793dfb86b6SDavid Blaikie   ASSERT_EQ(1u, ex.GetBytesLeft());
180b9739d40SPavel Labath   ASSERT_EQ('1', *ex.Peek());
181719ec93aSZachary Turner }
182719ec93aSZachary Turner 
183*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_InvalidHex_NoEof) {
184719ec93aSZachary Turner   const char kInvalidHex[] = "xx";
185719ec93aSZachary Turner   StringExtractor ex(kInvalidHex);
186719ec93aSZachary Turner   const bool kSetEofOnFail = false;
187719ec93aSZachary Turner 
188719ec93aSZachary Turner   ASSERT_EQ(0xcd, ex.GetHexU8(0xcd, kSetEofOnFail));
189719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
1903dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetFilePos());
1913dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetBytesLeft());
192b9739d40SPavel Labath   ASSERT_EQ('x', *ex.Peek());
193719ec93aSZachary Turner }
194719ec93aSZachary Turner 
195*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Exact_NoEof) {
196719ec93aSZachary Turner   const char kValidHexPair[] = "12";
197719ec93aSZachary Turner   StringExtractor ex(kValidHexPair);
198719ec93aSZachary Turner   const bool kSetEofOnFail = false;
199719ec93aSZachary Turner 
200719ec93aSZachary Turner   ASSERT_EQ(0x12, ex.GetHexU8(0x12, kSetEofOnFail));
201719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
2023dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetFilePos());
2033dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetBytesLeft());
204b9739d40SPavel Labath   ASSERT_EQ(nullptr, ex.Peek());
205719ec93aSZachary Turner }
206719ec93aSZachary Turner 
207*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexU8_Extra_NoEof) {
208719ec93aSZachary Turner   const char kValidHexPair[] = "1234";
209719ec93aSZachary Turner   StringExtractor ex(kValidHexPair);
210719ec93aSZachary Turner   const bool kSetEofOnFail = false;
211719ec93aSZachary Turner 
212719ec93aSZachary Turner   ASSERT_EQ(0x12, ex.GetHexU8(0x12, kSetEofOnFail));
213719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
2143dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetFilePos());
2153dfb86b6SDavid Blaikie   ASSERT_EQ(2u, ex.GetBytesLeft());
216b9739d40SPavel Labath   ASSERT_EQ('3', *ex.Peek());
217719ec93aSZachary Turner }
218719ec93aSZachary Turner 
219*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes) {
220719ec93aSZachary Turner   const char kHexEncodedBytes[] = "abcdef0123456789xyzw";
221719ec93aSZachary Turner   const size_t kValidHexPairs = 8;
222719ec93aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
223719ec93aSZachary Turner 
224719ec93aSZachary Turner   uint8_t dst[kValidHexPairs];
225d08f09c1SZachary Turner   ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));
226719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
227719ec93aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
228719ec93aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
229719ec93aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
230719ec93aSZachary Turner   EXPECT_EQ(0x23, dst[4]);
231719ec93aSZachary Turner   EXPECT_EQ(0x45, dst[5]);
232719ec93aSZachary Turner   EXPECT_EQ(0x67, dst[6]);
233719ec93aSZachary Turner   EXPECT_EQ(0x89, dst[7]);
234719ec93aSZachary Turner 
235719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
236719ec93aSZachary Turner   ASSERT_EQ(2 * kValidHexPairs, ex.GetFilePos());
237719ec93aSZachary Turner   ASSERT_EQ(false, ex.Empty());
2383dfb86b6SDavid Blaikie   ASSERT_EQ(4u, ex.GetBytesLeft());
239b9739d40SPavel Labath   ASSERT_EQ('x', *ex.Peek());
240719ec93aSZachary Turner }
241719ec93aSZachary Turner 
242*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes_FullString) {
243eb666b7aSZachary Turner   const char kHexEncodedBytes[] = "abcdef0123456789";
244eb666b7aSZachary Turner   const size_t kValidHexPairs = 8;
245eb666b7aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
246eb666b7aSZachary Turner 
247eb666b7aSZachary Turner   uint8_t dst[kValidHexPairs];
248eb666b7aSZachary Turner   ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));
249eb666b7aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
250eb666b7aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
251eb666b7aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
252eb666b7aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
253eb666b7aSZachary Turner   EXPECT_EQ(0x23, dst[4]);
254eb666b7aSZachary Turner   EXPECT_EQ(0x45, dst[5]);
255eb666b7aSZachary Turner   EXPECT_EQ(0x67, dst[6]);
256eb666b7aSZachary Turner   EXPECT_EQ(0x89, dst[7]);
257eb666b7aSZachary Turner }
258eb666b7aSZachary Turner 
259*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes_OddPair) {
260eb666b7aSZachary Turner   const char kHexEncodedBytes[] = "abcdef012345678w";
261eb666b7aSZachary Turner   const size_t kValidHexPairs = 7;
262eb666b7aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
263eb666b7aSZachary Turner 
264eb666b7aSZachary Turner   uint8_t dst[8];
265eb666b7aSZachary Turner   ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));
266eb666b7aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
267eb666b7aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
268eb666b7aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
269eb666b7aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
270eb666b7aSZachary Turner   EXPECT_EQ(0x23, dst[4]);
271eb666b7aSZachary Turner   EXPECT_EQ(0x45, dst[5]);
272eb666b7aSZachary Turner   EXPECT_EQ(0x67, dst[6]);
273eb666b7aSZachary Turner 
274eb666b7aSZachary Turner   // This one should be invalid
275eb666b7aSZachary Turner   EXPECT_EQ(0xde, dst[7]);
276eb666b7aSZachary Turner }
277eb666b7aSZachary Turner 
278*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes_OddPair2) {
279eb666b7aSZachary Turner   const char kHexEncodedBytes[] = "abcdef012345678";
280eb666b7aSZachary Turner   const size_t kValidHexPairs = 7;
281eb666b7aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
282eb666b7aSZachary Turner 
283eb666b7aSZachary Turner   uint8_t dst[8];
284eb666b7aSZachary Turner   ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));
285eb666b7aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
286eb666b7aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
287eb666b7aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
288eb666b7aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
289eb666b7aSZachary Turner   EXPECT_EQ(0x23, dst[4]);
290eb666b7aSZachary Turner   EXPECT_EQ(0x45, dst[5]);
291eb666b7aSZachary Turner   EXPECT_EQ(0x67, dst[6]);
292eb666b7aSZachary Turner 
293eb666b7aSZachary Turner   EXPECT_EQ(0xde, dst[7]);
294eb666b7aSZachary Turner }
295eb666b7aSZachary Turner 
296*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes_Underflow) {
297719ec93aSZachary Turner   const char kHexEncodedBytes[] = "abcdef0123456789xyzw";
298719ec93aSZachary Turner   const size_t kValidHexPairs = 8;
299719ec93aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
300719ec93aSZachary Turner 
301719ec93aSZachary Turner   uint8_t dst[12];
302d08f09c1SZachary Turner   ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));
303719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
304719ec93aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
305719ec93aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
306719ec93aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
307719ec93aSZachary Turner   EXPECT_EQ(0x23, dst[4]);
308719ec93aSZachary Turner   EXPECT_EQ(0x45, dst[5]);
309719ec93aSZachary Turner   EXPECT_EQ(0x67, dst[6]);
310719ec93aSZachary Turner   EXPECT_EQ(0x89, dst[7]);
311719ec93aSZachary Turner   // these bytes should be filled with fail_fill_value 0xde
312719ec93aSZachary Turner   EXPECT_EQ(0xde, dst[8]);
313719ec93aSZachary Turner   EXPECT_EQ(0xde, dst[9]);
314719ec93aSZachary Turner   EXPECT_EQ(0xde, dst[10]);
315719ec93aSZachary Turner   EXPECT_EQ(0xde, dst[11]);
316719ec93aSZachary Turner 
317719ec93aSZachary Turner   ASSERT_EQ(false, ex.IsGood());
318719ec93aSZachary Turner   ASSERT_EQ(UINT64_MAX, ex.GetFilePos());
319719ec93aSZachary Turner   ASSERT_EQ(false, ex.Empty());
3203dfb86b6SDavid Blaikie   ASSERT_EQ(0u, ex.GetBytesLeft());
321b9739d40SPavel Labath   ASSERT_EQ(0, ex.Peek());
322719ec93aSZachary Turner }
323719ec93aSZachary Turner 
324*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytes_Partial) {
325719ec93aSZachary Turner   const char kHexEncodedBytes[] = "abcdef0123456789xyzw";
326719ec93aSZachary Turner   const size_t kReadBytes = 4;
327719ec93aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
328719ec93aSZachary Turner 
329719ec93aSZachary Turner   uint8_t dst[12];
330719ec93aSZachary Turner   memset(dst, 0xab, sizeof(dst));
331*b9c1b51eSKate Stone   ASSERT_EQ(
332*b9c1b51eSKate Stone       kReadBytes,
333*b9c1b51eSKate Stone       ex.GetHexBytes(llvm::MutableArrayRef<uint8_t>(dst, kReadBytes), 0xde));
334719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
335719ec93aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
336719ec93aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
337719ec93aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
338719ec93aSZachary Turner   // these bytes should be unchanged
339719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[4]);
340719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[5]);
341719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[6]);
342719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[7]);
343719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[8]);
344719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[9]);
345719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[10]);
346719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[11]);
347719ec93aSZachary Turner 
348719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
349719ec93aSZachary Turner   ASSERT_EQ(kReadBytes * 2, ex.GetFilePos());
350719ec93aSZachary Turner   ASSERT_EQ(false, ex.Empty());
3513dfb86b6SDavid Blaikie   ASSERT_EQ(12u, ex.GetBytesLeft());
352b9739d40SPavel Labath   ASSERT_EQ('2', *ex.Peek());
353719ec93aSZachary Turner }
354719ec93aSZachary Turner 
355*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail) {
356719ec93aSZachary Turner   const char kHexEncodedBytes[] = "abcdef0123456789xyzw";
357719ec93aSZachary Turner   const size_t kValidHexPairs = 8;
358719ec93aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
359719ec93aSZachary Turner 
360719ec93aSZachary Turner   uint8_t dst[kValidHexPairs];
361d08f09c1SZachary Turner   ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));
362719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
363719ec93aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
364719ec93aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
365719ec93aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
366719ec93aSZachary Turner   EXPECT_EQ(0x23, dst[4]);
367719ec93aSZachary Turner   EXPECT_EQ(0x45, dst[5]);
368719ec93aSZachary Turner   EXPECT_EQ(0x67, dst[6]);
369719ec93aSZachary Turner   EXPECT_EQ(0x89, dst[7]);
370719ec93aSZachary Turner 
371719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
372719ec93aSZachary Turner   ASSERT_EQ(2 * kValidHexPairs, ex.GetFilePos());
373719ec93aSZachary Turner   ASSERT_EQ(false, ex.Empty());
3743dfb86b6SDavid Blaikie   ASSERT_EQ(4u, ex.GetBytesLeft());
375b9739d40SPavel Labath   ASSERT_EQ('x', *ex.Peek());
376719ec93aSZachary Turner }
377719ec93aSZachary Turner 
378*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail_FullString) {
379eb666b7aSZachary Turner   const char kHexEncodedBytes[] = "abcdef0123456789";
380eb666b7aSZachary Turner   const size_t kValidHexPairs = 8;
381eb666b7aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
382eb666b7aSZachary Turner 
383eb666b7aSZachary Turner   uint8_t dst[kValidHexPairs];
384eb666b7aSZachary Turner   ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));
385eb666b7aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
386eb666b7aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
387eb666b7aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
388eb666b7aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
389eb666b7aSZachary Turner   EXPECT_EQ(0x23, dst[4]);
390eb666b7aSZachary Turner   EXPECT_EQ(0x45, dst[5]);
391eb666b7aSZachary Turner   EXPECT_EQ(0x67, dst[6]);
392eb666b7aSZachary Turner   EXPECT_EQ(0x89, dst[7]);
393eb666b7aSZachary Turner }
394eb666b7aSZachary Turner 
395*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail_OddPair) {
396eb666b7aSZachary Turner   const char kHexEncodedBytes[] = "abcdef012345678w";
397eb666b7aSZachary Turner   const size_t kValidHexPairs = 7;
398eb666b7aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
399eb666b7aSZachary Turner 
400eb666b7aSZachary Turner   uint8_t dst[8];
401eb666b7aSZachary Turner   ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));
402eb666b7aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
403eb666b7aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
404eb666b7aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
405eb666b7aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
406eb666b7aSZachary Turner   EXPECT_EQ(0x23, dst[4]);
407eb666b7aSZachary Turner   EXPECT_EQ(0x45, dst[5]);
408eb666b7aSZachary Turner   EXPECT_EQ(0x67, dst[6]);
409eb666b7aSZachary Turner }
410eb666b7aSZachary Turner 
411*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail_OddPair2) {
412eb666b7aSZachary Turner   const char kHexEncodedBytes[] = "abcdef012345678";
413eb666b7aSZachary Turner   const size_t kValidHexPairs = 7;
414eb666b7aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
415eb666b7aSZachary Turner 
416eb666b7aSZachary Turner   uint8_t dst[8];
417eb666b7aSZachary Turner   ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));
418eb666b7aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
419eb666b7aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
420eb666b7aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
421eb666b7aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
422eb666b7aSZachary Turner   EXPECT_EQ(0x23, dst[4]);
423eb666b7aSZachary Turner   EXPECT_EQ(0x45, dst[5]);
424eb666b7aSZachary Turner   EXPECT_EQ(0x67, dst[6]);
425eb666b7aSZachary Turner }
426eb666b7aSZachary Turner 
427*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail_Underflow) {
428719ec93aSZachary Turner   const char kHexEncodedBytes[] = "abcdef0123456789xyzw";
429719ec93aSZachary Turner   const size_t kValidHexPairs = 8;
430719ec93aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
431719ec93aSZachary Turner 
432719ec93aSZachary Turner   uint8_t dst[12];
433719ec93aSZachary Turner   memset(dst, 0xef, sizeof(dst));
434d08f09c1SZachary Turner   ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));
435719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
436719ec93aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
437719ec93aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
438719ec93aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
439719ec93aSZachary Turner   EXPECT_EQ(0x23, dst[4]);
440719ec93aSZachary Turner   EXPECT_EQ(0x45, dst[5]);
441719ec93aSZachary Turner   EXPECT_EQ(0x67, dst[6]);
442719ec93aSZachary Turner   EXPECT_EQ(0x89, dst[7]);
443719ec93aSZachary Turner   // these bytes should be unchanged
444719ec93aSZachary Turner   EXPECT_EQ(0xef, dst[8]);
445719ec93aSZachary Turner   EXPECT_EQ(0xef, dst[9]);
446719ec93aSZachary Turner   EXPECT_EQ(0xef, dst[10]);
447719ec93aSZachary Turner   EXPECT_EQ(0xef, dst[11]);
448719ec93aSZachary Turner 
449719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
450719ec93aSZachary Turner   ASSERT_EQ(kValidHexPairs * 2, ex.GetFilePos());
451719ec93aSZachary Turner   ASSERT_EQ(false, ex.Empty());
4523dfb86b6SDavid Blaikie   ASSERT_EQ(4u, ex.GetBytesLeft());
453b9739d40SPavel Labath   ASSERT_EQ('x', *ex.Peek());
454719ec93aSZachary Turner }
455719ec93aSZachary Turner 
456*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetHexBytesAvail_Partial) {
457719ec93aSZachary Turner   const char kHexEncodedBytes[] = "abcdef0123456789xyzw";
458719ec93aSZachary Turner   const size_t kReadBytes = 4;
459719ec93aSZachary Turner   StringExtractor ex(kHexEncodedBytes);
460719ec93aSZachary Turner 
461719ec93aSZachary Turner   uint8_t dst[12];
462719ec93aSZachary Turner   memset(dst, 0xab, sizeof(dst));
463*b9c1b51eSKate Stone   ASSERT_EQ(kReadBytes, ex.GetHexBytesAvail(
464*b9c1b51eSKate Stone                             llvm::MutableArrayRef<uint8_t>(dst, kReadBytes)));
465719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[0]);
466719ec93aSZachary Turner   EXPECT_EQ(0xcd, dst[1]);
467719ec93aSZachary Turner   EXPECT_EQ(0xef, dst[2]);
468719ec93aSZachary Turner   EXPECT_EQ(0x01, dst[3]);
469719ec93aSZachary Turner   // these bytes should be unchanged
470719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[4]);
471719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[5]);
472719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[6]);
473719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[7]);
474719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[8]);
475719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[9]);
476719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[10]);
477719ec93aSZachary Turner   EXPECT_EQ(0xab, dst[11]);
478719ec93aSZachary Turner 
479719ec93aSZachary Turner   ASSERT_EQ(true, ex.IsGood());
480719ec93aSZachary Turner   ASSERT_EQ(kReadBytes * 2, ex.GetFilePos());
481719ec93aSZachary Turner   ASSERT_EQ(false, ex.Empty());
4823dfb86b6SDavid Blaikie   ASSERT_EQ(12u, ex.GetBytesLeft());
483b9739d40SPavel Labath   ASSERT_EQ('2', *ex.Peek());
484719ec93aSZachary Turner }
485719ec93aSZachary Turner 
486*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetNameColonValueSuccess) {
48705c4cebaSZachary Turner   const char kNameColonPairs[] = "key1:value1;key2:value2;";
48805c4cebaSZachary Turner   StringExtractor ex(kNameColonPairs);
489719ec93aSZachary Turner 
49054695a33SZachary Turner   llvm::StringRef name;
49154695a33SZachary Turner   llvm::StringRef value;
49205c4cebaSZachary Turner   EXPECT_TRUE(ex.GetNameColonValue(name, value));
49305c4cebaSZachary Turner   EXPECT_EQ("key1", name);
49405c4cebaSZachary Turner   EXPECT_EQ("value1", value);
49505c4cebaSZachary Turner   EXPECT_TRUE(ex.GetNameColonValue(name, value));
49605c4cebaSZachary Turner   EXPECT_EQ("key2", name);
49705c4cebaSZachary Turner   EXPECT_EQ("value2", value);
49805c4cebaSZachary Turner   EXPECT_EQ(0, ex.GetBytesLeft());
49905c4cebaSZachary Turner }
50005c4cebaSZachary Turner 
501*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetNameColonValueContainsColon) {
50205c4cebaSZachary Turner   const char kNameColonPairs[] = "key1:value1:value2;key2:value3;";
50305c4cebaSZachary Turner   StringExtractor ex(kNameColonPairs);
50405c4cebaSZachary Turner 
50554695a33SZachary Turner   llvm::StringRef name;
50654695a33SZachary Turner   llvm::StringRef value;
50705c4cebaSZachary Turner   EXPECT_TRUE(ex.GetNameColonValue(name, value));
50805c4cebaSZachary Turner   EXPECT_EQ("key1", name);
50905c4cebaSZachary Turner   EXPECT_EQ("value1:value2", value);
51005c4cebaSZachary Turner   EXPECT_TRUE(ex.GetNameColonValue(name, value));
51105c4cebaSZachary Turner   EXPECT_EQ("key2", name);
51205c4cebaSZachary Turner   EXPECT_EQ("value3", value);
51305c4cebaSZachary Turner   EXPECT_EQ(0, ex.GetBytesLeft());
51405c4cebaSZachary Turner }
51505c4cebaSZachary Turner 
516*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetNameColonValueNoSemicolon) {
51705c4cebaSZachary Turner   const char kNameColonPairs[] = "key1:value1";
51805c4cebaSZachary Turner   StringExtractor ex(kNameColonPairs);
51905c4cebaSZachary Turner 
52054695a33SZachary Turner   llvm::StringRef name;
52154695a33SZachary Turner   llvm::StringRef value;
52205c4cebaSZachary Turner   EXPECT_FALSE(ex.GetNameColonValue(name, value));
52305c4cebaSZachary Turner   EXPECT_EQ(0, ex.GetBytesLeft());
52405c4cebaSZachary Turner }
52505c4cebaSZachary Turner 
526*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetNameColonValueNoColon) {
52705c4cebaSZachary Turner   const char kNameColonPairs[] = "key1value1;";
52805c4cebaSZachary Turner   StringExtractor ex(kNameColonPairs);
52905c4cebaSZachary Turner 
53054695a33SZachary Turner   llvm::StringRef name;
53154695a33SZachary Turner   llvm::StringRef value;
53205c4cebaSZachary Turner   EXPECT_FALSE(ex.GetNameColonValue(name, value));
53305c4cebaSZachary Turner   EXPECT_EQ(0, ex.GetBytesLeft());
53405c4cebaSZachary Turner }
535eb666b7aSZachary Turner 
536*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetU32LittleEndian) {
53790999010SZachary Turner   StringExtractor ex("");
53890999010SZachary Turner   EXPECT_EQ(0x0, ex.GetHexMaxU32(true, 0));
539eb666b7aSZachary Turner 
54090999010SZachary Turner   ex.Reset("0");
54190999010SZachary Turner   EXPECT_EQ(0x0, ex.GetHexMaxU32(true, 1));
542eb666b7aSZachary Turner 
54390999010SZachary Turner   ex.Reset("1");
54490999010SZachary Turner   EXPECT_EQ(0x1, ex.GetHexMaxU32(true, 0));
54590999010SZachary Turner 
54690999010SZachary Turner   ex.Reset("01");
54790999010SZachary Turner   EXPECT_EQ(0x1, ex.GetHexMaxU32(true, 0));
54890999010SZachary Turner 
54990999010SZachary Turner   ex.Reset("001");
55090999010SZachary Turner   EXPECT_EQ(0x100, ex.GetHexMaxU32(true, 0));
55190999010SZachary Turner 
55290999010SZachary Turner   ex.Reset("12");
55390999010SZachary Turner   EXPECT_EQ(0x12, ex.GetHexMaxU32(true, 0));
55490999010SZachary Turner 
55590999010SZachary Turner   ex.Reset("123");
55690999010SZachary Turner   EXPECT_EQ(0x312, ex.GetHexMaxU32(true, 0));
55790999010SZachary Turner 
55890999010SZachary Turner   ex.Reset("1203");
55990999010SZachary Turner   EXPECT_EQ(0x312, ex.GetHexMaxU32(true, 0));
56090999010SZachary Turner 
56190999010SZachary Turner   ex.Reset("1234");
56290999010SZachary Turner   EXPECT_EQ(0x3412, ex.GetHexMaxU32(true, 0));
56390999010SZachary Turner 
56490999010SZachary Turner   ex.Reset("12340");
56590999010SZachary Turner   EXPECT_EQ(0x3412, ex.GetHexMaxU32(true, 0));
56690999010SZachary Turner 
56790999010SZachary Turner   ex.Reset("123400");
56890999010SZachary Turner   EXPECT_EQ(0x3412, ex.GetHexMaxU32(true, 0));
56990999010SZachary Turner 
57090999010SZachary Turner   ex.Reset("12345670");
57190999010SZachary Turner   EXPECT_EQ(0x70563412, ex.GetHexMaxU32(true, 0));
57290999010SZachary Turner 
57390999010SZachary Turner   ex.Reset("123456701");
574eb666b7aSZachary Turner   EXPECT_EQ(0, ex.GetHexMaxU32(true, 0));
575eb666b7aSZachary Turner }
576eb666b7aSZachary Turner 
577*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetU32BigEndian) {
57890999010SZachary Turner   StringExtractor ex("");
57990999010SZachary Turner   EXPECT_EQ(0x0, ex.GetHexMaxU32(false, 0));
580eb666b7aSZachary Turner 
58190999010SZachary Turner   ex.Reset("0");
58290999010SZachary Turner   EXPECT_EQ(0x0, ex.GetHexMaxU32(false, 1));
583eb666b7aSZachary Turner 
58490999010SZachary Turner   ex.Reset("1");
58590999010SZachary Turner   EXPECT_EQ(0x1, ex.GetHexMaxU32(false, 0));
58690999010SZachary Turner 
58790999010SZachary Turner   ex.Reset("01");
58890999010SZachary Turner   EXPECT_EQ(0x1, ex.GetHexMaxU32(false, 0));
58990999010SZachary Turner 
59090999010SZachary Turner   ex.Reset("001");
59190999010SZachary Turner   EXPECT_EQ(0x1, ex.GetHexMaxU32(false, 0));
59290999010SZachary Turner 
59390999010SZachary Turner   ex.Reset("12");
59490999010SZachary Turner   EXPECT_EQ(0x12, ex.GetHexMaxU32(false, 0));
59590999010SZachary Turner 
59690999010SZachary Turner   ex.Reset("123");
59790999010SZachary Turner   EXPECT_EQ(0x123, ex.GetHexMaxU32(false, 0));
59890999010SZachary Turner 
59990999010SZachary Turner   ex.Reset("1203");
60090999010SZachary Turner   EXPECT_EQ(0x1203, ex.GetHexMaxU32(false, 0));
60190999010SZachary Turner 
60290999010SZachary Turner   ex.Reset("1234");
60390999010SZachary Turner   EXPECT_EQ(0x1234, ex.GetHexMaxU32(false, 0));
60490999010SZachary Turner 
60590999010SZachary Turner   ex.Reset("12340");
60690999010SZachary Turner   EXPECT_EQ(0x12340, ex.GetHexMaxU32(false, 0));
60790999010SZachary Turner 
60890999010SZachary Turner   ex.Reset("123400");
60990999010SZachary Turner   EXPECT_EQ(0x123400, ex.GetHexMaxU32(false, 0));
61090999010SZachary Turner 
61190999010SZachary Turner   ex.Reset("12345670");
61290999010SZachary Turner   EXPECT_EQ(0x12345670, ex.GetHexMaxU32(false, 0));
61390999010SZachary Turner 
61490999010SZachary Turner   ex.Reset("123456700");
615eb666b7aSZachary Turner   EXPECT_EQ(0, ex.GetHexMaxU32(false, 0));
616eb666b7aSZachary Turner }
617eb666b7aSZachary Turner 
618*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetU64LittleEndian) {
61990999010SZachary Turner   StringExtractor ex("");
62090999010SZachary Turner   EXPECT_EQ(0x0, ex.GetHexMaxU64(true, 0));
621eb666b7aSZachary Turner 
62290999010SZachary Turner   ex.Reset("0");
62390999010SZachary Turner   EXPECT_EQ(0x0, ex.GetHexMaxU64(true, 1));
62490999010SZachary Turner 
62590999010SZachary Turner   ex.Reset("1");
62690999010SZachary Turner   EXPECT_EQ(0x1, ex.GetHexMaxU64(true, 0));
62790999010SZachary Turner 
62890999010SZachary Turner   ex.Reset("01");
62990999010SZachary Turner   EXPECT_EQ(0x1, ex.GetHexMaxU64(true, 0));
63090999010SZachary Turner 
63190999010SZachary Turner   ex.Reset("001");
63290999010SZachary Turner   EXPECT_EQ(0x100, ex.GetHexMaxU64(true, 0));
63390999010SZachary Turner 
63490999010SZachary Turner   ex.Reset("12");
63590999010SZachary Turner   EXPECT_EQ(0x12, ex.GetHexMaxU64(true, 0));
63690999010SZachary Turner 
63790999010SZachary Turner   ex.Reset("123");
63890999010SZachary Turner   EXPECT_EQ(0x312, ex.GetHexMaxU64(true, 0));
63990999010SZachary Turner 
64090999010SZachary Turner   ex.Reset("1203");
64190999010SZachary Turner   EXPECT_EQ(0x312, ex.GetHexMaxU64(true, 0));
64290999010SZachary Turner 
64390999010SZachary Turner   ex.Reset("1234");
64490999010SZachary Turner   EXPECT_EQ(0x3412, ex.GetHexMaxU64(true, 0));
64590999010SZachary Turner 
64690999010SZachary Turner   ex.Reset("12340");
64790999010SZachary Turner   EXPECT_EQ(0x3412, ex.GetHexMaxU64(true, 0));
64890999010SZachary Turner 
64990999010SZachary Turner   ex.Reset("123400");
65090999010SZachary Turner   EXPECT_EQ(0x3412, ex.GetHexMaxU64(true, 0));
651eb666b7aSZachary Turner 
652eb666b7aSZachary Turner   ex.Reset("123456789ABCDEF0");
653eb666b7aSZachary Turner   EXPECT_EQ(0xF0DEBC9A78563412ULL, ex.GetHexMaxU64(true, 0));
654eb666b7aSZachary Turner 
65590999010SZachary Turner   ex.Reset("123456789ABCDEF01");
656eb666b7aSZachary Turner   EXPECT_EQ(0, ex.GetHexMaxU64(true, 0));
657eb666b7aSZachary Turner }
658eb666b7aSZachary Turner 
659*b9c1b51eSKate Stone TEST_F(StringExtractorTest, GetU64BigEndian) {
66090999010SZachary Turner   StringExtractor ex("");
66190999010SZachary Turner   EXPECT_EQ(0x0, ex.GetHexMaxU64(false, 0));
662eb666b7aSZachary Turner 
66390999010SZachary Turner   ex.Reset("0");
66490999010SZachary Turner   EXPECT_EQ(0x0, ex.GetHexMaxU64(false, 1));
66590999010SZachary Turner 
66690999010SZachary Turner   ex.Reset("1");
66790999010SZachary Turner   EXPECT_EQ(0x1, ex.GetHexMaxU64(false, 0));
66890999010SZachary Turner 
66990999010SZachary Turner   ex.Reset("01");
67090999010SZachary Turner   EXPECT_EQ(0x1, ex.GetHexMaxU64(false, 0));
67190999010SZachary Turner 
67290999010SZachary Turner   ex.Reset("001");
67390999010SZachary Turner   EXPECT_EQ(0x1, ex.GetHexMaxU64(false, 0));
67490999010SZachary Turner 
67590999010SZachary Turner   ex.Reset("12");
67690999010SZachary Turner   EXPECT_EQ(0x12, ex.GetHexMaxU64(false, 0));
67790999010SZachary Turner 
67890999010SZachary Turner   ex.Reset("123");
67990999010SZachary Turner   EXPECT_EQ(0x123, ex.GetHexMaxU64(false, 0));
68090999010SZachary Turner 
68190999010SZachary Turner   ex.Reset("1203");
68290999010SZachary Turner   EXPECT_EQ(0x1203, ex.GetHexMaxU64(false, 0));
68390999010SZachary Turner 
68490999010SZachary Turner   ex.Reset("1234");
68590999010SZachary Turner   EXPECT_EQ(0x1234, ex.GetHexMaxU64(false, 0));
68690999010SZachary Turner 
68790999010SZachary Turner   ex.Reset("12340");
68890999010SZachary Turner   EXPECT_EQ(0x12340, ex.GetHexMaxU64(false, 0));
68990999010SZachary Turner 
69090999010SZachary Turner   ex.Reset("123400");
69190999010SZachary Turner   EXPECT_EQ(0x123400, ex.GetHexMaxU64(false, 0));
692eb666b7aSZachary Turner 
693eb666b7aSZachary Turner   ex.Reset("123456789ABCDEF0");
694eb666b7aSZachary Turner   EXPECT_EQ(0x123456789ABCDEF0ULL, ex.GetHexMaxU64(false, 0));
695eb666b7aSZachary Turner 
696eb666b7aSZachary Turner   ex.Reset("123456789ABCDEF000");
697eb666b7aSZachary Turner   EXPECT_EQ(0, ex.GetHexMaxU64(false, 0));
698eb666b7aSZachary Turner }
699