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