698 lines · cpp
1#include "gtest/gtest.h"2#include <limits.h>3 4#include "lldb/Utility/StringExtractor.h"5 6namespace {7class StringExtractorTest : public ::testing::Test {};8} // namespace9 10TEST_F(StringExtractorTest, InitEmpty) {11 llvm::StringRef kEmptyString = "";12 StringExtractor ex(kEmptyString);13 14 ASSERT_EQ(true, ex.IsGood());15 ASSERT_EQ(0u, ex.GetFilePos());16 ASSERT_EQ(kEmptyString, ex.GetStringRef());17 ASSERT_EQ(true, ex.Empty());18 ASSERT_EQ(0u, ex.GetBytesLeft());19 ASSERT_EQ(nullptr, ex.Peek());20}21 22TEST_F(StringExtractorTest, InitMisc) {23 llvm::StringRef kInitMiscString = "Hello, StringExtractor!";24 StringExtractor ex(kInitMiscString);25 26 ASSERT_EQ(true, ex.IsGood());27 ASSERT_EQ(0u, ex.GetFilePos());28 ASSERT_EQ(kInitMiscString, ex.GetStringRef());29 ASSERT_EQ(false, ex.Empty());30 ASSERT_EQ(kInitMiscString.size(), ex.GetBytesLeft());31 ASSERT_EQ(kInitMiscString[0], *ex.Peek());32}33 34TEST_F(StringExtractorTest, DecodeHexU8_Underflow) {35 llvm::StringRef kEmptyString = "";36 StringExtractor ex(kEmptyString);37 38 ASSERT_EQ(-1, ex.DecodeHexU8());39 ASSERT_EQ(true, ex.IsGood());40 ASSERT_EQ(0u, ex.GetFilePos());41 ASSERT_EQ(true, ex.Empty());42 ASSERT_EQ(0u, ex.GetBytesLeft());43 ASSERT_EQ(nullptr, ex.Peek());44}45 46TEST_F(StringExtractorTest, DecodeHexU8_Underflow2) {47 StringExtractor ex("1");48 49 ASSERT_EQ(-1, ex.DecodeHexU8());50 ASSERT_EQ(true, ex.IsGood());51 ASSERT_EQ(0u, ex.GetFilePos());52 ASSERT_EQ(1u, ex.GetBytesLeft());53 ASSERT_EQ('1', *ex.Peek());54}55 56TEST_F(StringExtractorTest, DecodeHexU8_InvalidHex) {57 llvm::StringRef kInvalidHex = "xa";58 StringExtractor ex(kInvalidHex);59 60 ASSERT_EQ(-1, ex.DecodeHexU8());61 ASSERT_EQ(true, ex.IsGood());62 ASSERT_EQ(0u, ex.GetFilePos());63 ASSERT_EQ(2u, ex.GetBytesLeft());64 ASSERT_EQ('x', *ex.Peek());65}66 67TEST_F(StringExtractorTest, DecodeHexU8_InvalidHex2) {68 llvm::StringRef kInvalidHex = "ax";69 StringExtractor ex(kInvalidHex);70 71 ASSERT_EQ(-1, ex.DecodeHexU8());72 ASSERT_EQ(true, ex.IsGood());73 ASSERT_EQ(0u, ex.GetFilePos());74 ASSERT_EQ(2u, ex.GetBytesLeft());75 ASSERT_EQ('a', *ex.Peek());76}77 78TEST_F(StringExtractorTest, DecodeHexU8_Exact) {79 llvm::StringRef kValidHexPair = "12";80 StringExtractor ex(kValidHexPair);81 82 ASSERT_EQ(0x12, ex.DecodeHexU8());83 ASSERT_EQ(true, ex.IsGood());84 ASSERT_EQ(2u, ex.GetFilePos());85 ASSERT_EQ(0u, ex.GetBytesLeft());86 ASSERT_EQ(nullptr, ex.Peek());87}88 89TEST_F(StringExtractorTest, DecodeHexU8_Extra) {90 llvm::StringRef kValidHexPair = "1234";91 StringExtractor ex(kValidHexPair);92 93 ASSERT_EQ(0x12, ex.DecodeHexU8());94 ASSERT_EQ(true, ex.IsGood());95 ASSERT_EQ(2u, ex.GetFilePos());96 ASSERT_EQ(2u, ex.GetBytesLeft());97 ASSERT_EQ('3', *ex.Peek());98}99 100TEST_F(StringExtractorTest, GetHexU8_Underflow) {101 llvm::StringRef kEmptyString = "";102 StringExtractor ex(kEmptyString);103 104 ASSERT_EQ(0xab, ex.GetHexU8(0xab));105 ASSERT_EQ(false, ex.IsGood());106 ASSERT_EQ(UINT64_MAX, ex.GetFilePos());107 ASSERT_EQ(true, ex.Empty());108 ASSERT_EQ(0u, ex.GetBytesLeft());109 ASSERT_EQ(nullptr, ex.Peek());110}111 112TEST_F(StringExtractorTest, GetHexU8_Underflow2) {113 llvm::StringRef kOneNibble = "1";114 StringExtractor ex(kOneNibble);115 116 ASSERT_EQ(0xbc, ex.GetHexU8(0xbc));117 ASSERT_EQ(false, ex.IsGood());118 ASSERT_EQ(UINT64_MAX, ex.GetFilePos());119 ASSERT_EQ(0u, ex.GetBytesLeft());120 ASSERT_EQ(nullptr, ex.Peek());121}122 123TEST_F(StringExtractorTest, GetHexU8_InvalidHex) {124 llvm::StringRef kInvalidHex = "xx";125 StringExtractor ex(kInvalidHex);126 127 ASSERT_EQ(0xcd, ex.GetHexU8(0xcd));128 ASSERT_EQ(false, ex.IsGood());129 ASSERT_EQ(UINT64_MAX, ex.GetFilePos());130 ASSERT_EQ(0u, ex.GetBytesLeft());131 ASSERT_EQ(nullptr, ex.Peek());132}133 134TEST_F(StringExtractorTest, GetHexU8_Exact) {135 llvm::StringRef kValidHexPair = "12";136 StringExtractor ex(kValidHexPair);137 138 ASSERT_EQ(0x12, ex.GetHexU8(0x12));139 ASSERT_EQ(true, ex.IsGood());140 ASSERT_EQ(2u, ex.GetFilePos());141 ASSERT_EQ(0u, ex.GetBytesLeft());142 ASSERT_EQ(nullptr, ex.Peek());143}144 145TEST_F(StringExtractorTest, GetHexU8_Extra) {146 llvm::StringRef kValidHexPair = "1234";147 StringExtractor ex(kValidHexPair);148 149 ASSERT_EQ(0x12, ex.GetHexU8(0x12));150 ASSERT_EQ(true, ex.IsGood());151 ASSERT_EQ(2u, ex.GetFilePos());152 ASSERT_EQ(2u, ex.GetBytesLeft());153 ASSERT_EQ('3', *ex.Peek());154}155 156TEST_F(StringExtractorTest, GetHexU8_Underflow_NoEof) {157 llvm::StringRef kEmptyString = "";158 StringExtractor ex(kEmptyString);159 const bool kSetEofOnFail = false;160 161 ASSERT_EQ(0xab, ex.GetHexU8(0xab, kSetEofOnFail));162 ASSERT_EQ(false, ex.IsGood()); // this result seems inconsistent with163 // kSetEofOnFail == false164 ASSERT_EQ(UINT64_MAX, ex.GetFilePos());165 ASSERT_EQ(true, ex.Empty());166 ASSERT_EQ(0u, ex.GetBytesLeft());167 ASSERT_EQ(nullptr, ex.Peek());168}169 170TEST_F(StringExtractorTest, GetHexU8_Underflow2_NoEof) {171 llvm::StringRef kOneNibble = "1";172 StringExtractor ex(kOneNibble);173 const bool kSetEofOnFail = false;174 175 ASSERT_EQ(0xbc, ex.GetHexU8(0xbc, kSetEofOnFail));176 ASSERT_EQ(true, ex.IsGood());177 ASSERT_EQ(0u, ex.GetFilePos());178 ASSERT_EQ(1u, ex.GetBytesLeft());179 ASSERT_EQ('1', *ex.Peek());180}181 182TEST_F(StringExtractorTest, GetHexU8_InvalidHex_NoEof) {183 llvm::StringRef kInvalidHex = "xx";184 StringExtractor ex(kInvalidHex);185 const bool kSetEofOnFail = false;186 187 ASSERT_EQ(0xcd, ex.GetHexU8(0xcd, kSetEofOnFail));188 ASSERT_EQ(true, ex.IsGood());189 ASSERT_EQ(0u, ex.GetFilePos());190 ASSERT_EQ(2u, ex.GetBytesLeft());191 ASSERT_EQ('x', *ex.Peek());192}193 194TEST_F(StringExtractorTest, GetHexU8_Exact_NoEof) {195 llvm::StringRef kValidHexPair = "12";196 StringExtractor ex(kValidHexPair);197 const bool kSetEofOnFail = false;198 199 ASSERT_EQ(0x12, ex.GetHexU8(0x12, kSetEofOnFail));200 ASSERT_EQ(true, ex.IsGood());201 ASSERT_EQ(2u, ex.GetFilePos());202 ASSERT_EQ(0u, ex.GetBytesLeft());203 ASSERT_EQ(nullptr, ex.Peek());204}205 206TEST_F(StringExtractorTest, GetHexU8_Extra_NoEof) {207 llvm::StringRef kValidHexPair = "1234";208 StringExtractor ex(kValidHexPair);209 const bool kSetEofOnFail = false;210 211 ASSERT_EQ(0x12, ex.GetHexU8(0x12, kSetEofOnFail));212 ASSERT_EQ(true, ex.IsGood());213 ASSERT_EQ(2u, ex.GetFilePos());214 ASSERT_EQ(2u, ex.GetBytesLeft());215 ASSERT_EQ('3', *ex.Peek());216}217 218TEST_F(StringExtractorTest, GetHexBytes) {219 llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";220 const size_t kValidHexPairs = 8;221 StringExtractor ex(kHexEncodedBytes);222 223 uint8_t dst[kValidHexPairs];224 ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));225 EXPECT_EQ(0xab, dst[0]);226 EXPECT_EQ(0xcd, dst[1]);227 EXPECT_EQ(0xef, dst[2]);228 EXPECT_EQ(0x01, dst[3]);229 EXPECT_EQ(0x23, dst[4]);230 EXPECT_EQ(0x45, dst[5]);231 EXPECT_EQ(0x67, dst[6]);232 EXPECT_EQ(0x89, dst[7]);233 234 ASSERT_EQ(true, ex.IsGood());235 ASSERT_EQ(2 * kValidHexPairs, ex.GetFilePos());236 ASSERT_EQ(false, ex.Empty());237 ASSERT_EQ(4u, ex.GetBytesLeft());238 ASSERT_EQ('x', *ex.Peek());239}240 241TEST_F(StringExtractorTest, GetHexBytes_FullString) {242 llvm::StringRef kHexEncodedBytes = "abcdef0123456789";243 const size_t kValidHexPairs = 8;244 StringExtractor ex(kHexEncodedBytes);245 246 uint8_t dst[kValidHexPairs];247 ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));248 EXPECT_EQ(0xab, dst[0]);249 EXPECT_EQ(0xcd, dst[1]);250 EXPECT_EQ(0xef, dst[2]);251 EXPECT_EQ(0x01, dst[3]);252 EXPECT_EQ(0x23, dst[4]);253 EXPECT_EQ(0x45, dst[5]);254 EXPECT_EQ(0x67, dst[6]);255 EXPECT_EQ(0x89, dst[7]);256}257 258TEST_F(StringExtractorTest, GetHexBytes_OddPair) {259 llvm::StringRef kHexEncodedBytes = "abcdef012345678w";260 const size_t kValidHexPairs = 7;261 StringExtractor ex(kHexEncodedBytes);262 263 uint8_t dst[8];264 ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));265 EXPECT_EQ(0xab, dst[0]);266 EXPECT_EQ(0xcd, dst[1]);267 EXPECT_EQ(0xef, dst[2]);268 EXPECT_EQ(0x01, dst[3]);269 EXPECT_EQ(0x23, dst[4]);270 EXPECT_EQ(0x45, dst[5]);271 EXPECT_EQ(0x67, dst[6]);272 273 // This one should be invalid274 EXPECT_EQ(0xde, dst[7]);275}276 277TEST_F(StringExtractorTest, GetHexBytes_OddPair2) {278 llvm::StringRef kHexEncodedBytes = "abcdef012345678";279 const size_t kValidHexPairs = 7;280 StringExtractor ex(kHexEncodedBytes);281 282 uint8_t dst[8];283 ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));284 EXPECT_EQ(0xab, dst[0]);285 EXPECT_EQ(0xcd, dst[1]);286 EXPECT_EQ(0xef, dst[2]);287 EXPECT_EQ(0x01, dst[3]);288 EXPECT_EQ(0x23, dst[4]);289 EXPECT_EQ(0x45, dst[5]);290 EXPECT_EQ(0x67, dst[6]);291 292 EXPECT_EQ(0xde, dst[7]);293}294 295TEST_F(StringExtractorTest, GetHexBytes_Underflow) {296 llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";297 const size_t kValidHexPairs = 8;298 StringExtractor ex(kHexEncodedBytes);299 300 uint8_t dst[12];301 ASSERT_EQ(kValidHexPairs, ex.GetHexBytes(dst, 0xde));302 EXPECT_EQ(0xab, dst[0]);303 EXPECT_EQ(0xcd, dst[1]);304 EXPECT_EQ(0xef, dst[2]);305 EXPECT_EQ(0x01, dst[3]);306 EXPECT_EQ(0x23, dst[4]);307 EXPECT_EQ(0x45, dst[5]);308 EXPECT_EQ(0x67, dst[6]);309 EXPECT_EQ(0x89, dst[7]);310 // these bytes should be filled with fail_fill_value 0xde311 EXPECT_EQ(0xde, dst[8]);312 EXPECT_EQ(0xde, dst[9]);313 EXPECT_EQ(0xde, dst[10]);314 EXPECT_EQ(0xde, dst[11]);315 316 ASSERT_EQ(false, ex.IsGood());317 ASSERT_EQ(UINT64_MAX, ex.GetFilePos());318 ASSERT_EQ(false, ex.Empty());319 ASSERT_EQ(0u, ex.GetBytesLeft());320 ASSERT_EQ(nullptr, ex.Peek());321}322 323TEST_F(StringExtractorTest, GetHexBytes_Partial) {324 llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";325 const size_t kReadBytes = 4;326 StringExtractor ex(kHexEncodedBytes);327 328 uint8_t dst[12];329 memset(dst, 0xab, sizeof(dst));330 ASSERT_EQ(331 kReadBytes,332 ex.GetHexBytes(llvm::MutableArrayRef<uint8_t>(dst, kReadBytes), 0xde));333 EXPECT_EQ(0xab, dst[0]);334 EXPECT_EQ(0xcd, dst[1]);335 EXPECT_EQ(0xef, dst[2]);336 EXPECT_EQ(0x01, dst[3]);337 // these bytes should be unchanged338 EXPECT_EQ(0xab, dst[4]);339 EXPECT_EQ(0xab, dst[5]);340 EXPECT_EQ(0xab, dst[6]);341 EXPECT_EQ(0xab, dst[7]);342 EXPECT_EQ(0xab, dst[8]);343 EXPECT_EQ(0xab, dst[9]);344 EXPECT_EQ(0xab, dst[10]);345 EXPECT_EQ(0xab, dst[11]);346 347 ASSERT_EQ(true, ex.IsGood());348 ASSERT_EQ(kReadBytes * 2, ex.GetFilePos());349 ASSERT_EQ(false, ex.Empty());350 ASSERT_EQ(12u, ex.GetBytesLeft());351 ASSERT_EQ('2', *ex.Peek());352}353 354TEST_F(StringExtractorTest, GetHexBytesAvail) {355 llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";356 const size_t kValidHexPairs = 8;357 StringExtractor ex(kHexEncodedBytes);358 359 uint8_t dst[kValidHexPairs];360 ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));361 EXPECT_EQ(0xab, dst[0]);362 EXPECT_EQ(0xcd, dst[1]);363 EXPECT_EQ(0xef, dst[2]);364 EXPECT_EQ(0x01, dst[3]);365 EXPECT_EQ(0x23, dst[4]);366 EXPECT_EQ(0x45, dst[5]);367 EXPECT_EQ(0x67, dst[6]);368 EXPECT_EQ(0x89, dst[7]);369 370 ASSERT_EQ(true, ex.IsGood());371 ASSERT_EQ(2 * kValidHexPairs, ex.GetFilePos());372 ASSERT_EQ(false, ex.Empty());373 ASSERT_EQ(4u, ex.GetBytesLeft());374 ASSERT_EQ('x', *ex.Peek());375}376 377TEST_F(StringExtractorTest, GetHexBytesAvail_FullString) {378 llvm::StringRef kHexEncodedBytes = "abcdef0123456789";379 const size_t kValidHexPairs = 8;380 StringExtractor ex(kHexEncodedBytes);381 382 uint8_t dst[kValidHexPairs];383 ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));384 EXPECT_EQ(0xab, dst[0]);385 EXPECT_EQ(0xcd, dst[1]);386 EXPECT_EQ(0xef, dst[2]);387 EXPECT_EQ(0x01, dst[3]);388 EXPECT_EQ(0x23, dst[4]);389 EXPECT_EQ(0x45, dst[5]);390 EXPECT_EQ(0x67, dst[6]);391 EXPECT_EQ(0x89, dst[7]);392}393 394TEST_F(StringExtractorTest, GetHexBytesAvail_OddPair) {395 llvm::StringRef kHexEncodedBytes = "abcdef012345678w";396 const size_t kValidHexPairs = 7;397 StringExtractor ex(kHexEncodedBytes);398 399 uint8_t dst[8];400 ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));401 EXPECT_EQ(0xab, dst[0]);402 EXPECT_EQ(0xcd, dst[1]);403 EXPECT_EQ(0xef, dst[2]);404 EXPECT_EQ(0x01, dst[3]);405 EXPECT_EQ(0x23, dst[4]);406 EXPECT_EQ(0x45, dst[5]);407 EXPECT_EQ(0x67, dst[6]);408}409 410TEST_F(StringExtractorTest, GetHexBytesAvail_OddPair2) {411 llvm::StringRef kHexEncodedBytes = "abcdef012345678";412 const size_t kValidHexPairs = 7;413 StringExtractor ex(kHexEncodedBytes);414 415 uint8_t dst[8];416 ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));417 EXPECT_EQ(0xab, dst[0]);418 EXPECT_EQ(0xcd, dst[1]);419 EXPECT_EQ(0xef, dst[2]);420 EXPECT_EQ(0x01, dst[3]);421 EXPECT_EQ(0x23, dst[4]);422 EXPECT_EQ(0x45, dst[5]);423 EXPECT_EQ(0x67, dst[6]);424}425 426TEST_F(StringExtractorTest, GetHexBytesAvail_Underflow) {427 llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";428 const size_t kValidHexPairs = 8;429 StringExtractor ex(kHexEncodedBytes);430 431 uint8_t dst[12];432 memset(dst, 0xef, sizeof(dst));433 ASSERT_EQ(kValidHexPairs, ex.GetHexBytesAvail(dst));434 EXPECT_EQ(0xab, dst[0]);435 EXPECT_EQ(0xcd, dst[1]);436 EXPECT_EQ(0xef, dst[2]);437 EXPECT_EQ(0x01, dst[3]);438 EXPECT_EQ(0x23, dst[4]);439 EXPECT_EQ(0x45, dst[5]);440 EXPECT_EQ(0x67, dst[6]);441 EXPECT_EQ(0x89, dst[7]);442 // these bytes should be unchanged443 EXPECT_EQ(0xef, dst[8]);444 EXPECT_EQ(0xef, dst[9]);445 EXPECT_EQ(0xef, dst[10]);446 EXPECT_EQ(0xef, dst[11]);447 448 ASSERT_EQ(true, ex.IsGood());449 ASSERT_EQ(kValidHexPairs * 2, ex.GetFilePos());450 ASSERT_EQ(false, ex.Empty());451 ASSERT_EQ(4u, ex.GetBytesLeft());452 ASSERT_EQ('x', *ex.Peek());453}454 455TEST_F(StringExtractorTest, GetHexBytesAvail_Partial) {456 llvm::StringRef kHexEncodedBytes = "abcdef0123456789xyzw";457 const size_t kReadBytes = 4;458 StringExtractor ex(kHexEncodedBytes);459 460 uint8_t dst[12];461 memset(dst, 0xab, sizeof(dst));462 ASSERT_EQ(kReadBytes, ex.GetHexBytesAvail(463 llvm::MutableArrayRef<uint8_t>(dst, kReadBytes)));464 EXPECT_EQ(0xab, dst[0]);465 EXPECT_EQ(0xcd, dst[1]);466 EXPECT_EQ(0xef, dst[2]);467 EXPECT_EQ(0x01, dst[3]);468 // these bytes should be unchanged469 EXPECT_EQ(0xab, dst[4]);470 EXPECT_EQ(0xab, dst[5]);471 EXPECT_EQ(0xab, dst[6]);472 EXPECT_EQ(0xab, dst[7]);473 EXPECT_EQ(0xab, dst[8]);474 EXPECT_EQ(0xab, dst[9]);475 EXPECT_EQ(0xab, dst[10]);476 EXPECT_EQ(0xab, dst[11]);477 478 ASSERT_EQ(true, ex.IsGood());479 ASSERT_EQ(kReadBytes * 2, ex.GetFilePos());480 ASSERT_EQ(false, ex.Empty());481 ASSERT_EQ(12u, ex.GetBytesLeft());482 ASSERT_EQ('2', *ex.Peek());483}484 485TEST_F(StringExtractorTest, GetNameColonValueSuccess) {486 llvm::StringRef kNameColonPairs = "key1:value1;key2:value2;";487 StringExtractor ex(kNameColonPairs);488 489 llvm::StringRef name;490 llvm::StringRef value;491 EXPECT_TRUE(ex.GetNameColonValue(name, value));492 EXPECT_EQ("key1", name);493 EXPECT_EQ("value1", value);494 EXPECT_TRUE(ex.GetNameColonValue(name, value));495 EXPECT_EQ("key2", name);496 EXPECT_EQ("value2", value);497 EXPECT_EQ(0u, ex.GetBytesLeft());498}499 500TEST_F(StringExtractorTest, GetNameColonValueContainsColon) {501 llvm::StringRef kNameColonPairs = "key1:value1:value2;key2:value3;";502 StringExtractor ex(kNameColonPairs);503 504 llvm::StringRef name;505 llvm::StringRef value;506 EXPECT_TRUE(ex.GetNameColonValue(name, value));507 EXPECT_EQ("key1", name);508 EXPECT_EQ("value1:value2", value);509 EXPECT_TRUE(ex.GetNameColonValue(name, value));510 EXPECT_EQ("key2", name);511 EXPECT_EQ("value3", value);512 EXPECT_EQ(0u, ex.GetBytesLeft());513}514 515TEST_F(StringExtractorTest, GetNameColonValueNoSemicolon) {516 llvm::StringRef kNameColonPairs = "key1:value1";517 StringExtractor ex(kNameColonPairs);518 519 llvm::StringRef name;520 llvm::StringRef value;521 EXPECT_FALSE(ex.GetNameColonValue(name, value));522 EXPECT_EQ(0u, ex.GetBytesLeft());523}524 525TEST_F(StringExtractorTest, GetNameColonValueNoColon) {526 llvm::StringRef kNameColonPairs = "key1value1;";527 StringExtractor ex(kNameColonPairs);528 529 llvm::StringRef name;530 llvm::StringRef value;531 EXPECT_FALSE(ex.GetNameColonValue(name, value));532 EXPECT_EQ(0u, ex.GetBytesLeft());533}534 535TEST_F(StringExtractorTest, GetU32LittleEndian) {536 StringExtractor ex("");537 EXPECT_EQ(0x0ull, ex.GetHexMaxU32(true, 0));538 539 ex.Reset("0");540 EXPECT_EQ(0x0ull, ex.GetHexMaxU32(true, 1));541 542 ex.Reset("1");543 EXPECT_EQ(0x1ull, ex.GetHexMaxU32(true, 0));544 545 ex.Reset("01");546 EXPECT_EQ(0x1ull, ex.GetHexMaxU32(true, 0));547 548 ex.Reset("001");549 EXPECT_EQ(0x100ull, ex.GetHexMaxU32(true, 0));550 551 ex.Reset("12");552 EXPECT_EQ(0x12ull, ex.GetHexMaxU32(true, 0));553 554 ex.Reset("123");555 EXPECT_EQ(0x312ull, ex.GetHexMaxU32(true, 0));556 557 ex.Reset("1203");558 EXPECT_EQ(0x312ull, ex.GetHexMaxU32(true, 0));559 560 ex.Reset("1234");561 EXPECT_EQ(0x3412ull, ex.GetHexMaxU32(true, 0));562 563 ex.Reset("12340");564 EXPECT_EQ(0x3412ull, ex.GetHexMaxU32(true, 0));565 566 ex.Reset("123400");567 EXPECT_EQ(0x3412ull, ex.GetHexMaxU32(true, 0));568 569 ex.Reset("12345670");570 EXPECT_EQ(0x70563412ull, ex.GetHexMaxU32(true, 0));571 572 ex.Reset("123456701");573 EXPECT_EQ(0ull, ex.GetHexMaxU32(true, 0));574}575 576TEST_F(StringExtractorTest, GetU32BigEndian) {577 StringExtractor ex("");578 EXPECT_EQ(0x0ull, ex.GetHexMaxU32(false, 0));579 580 ex.Reset("0");581 EXPECT_EQ(0x0ull, ex.GetHexMaxU32(false, 1));582 583 ex.Reset("1");584 EXPECT_EQ(0x1ull, ex.GetHexMaxU32(false, 0));585 586 ex.Reset("01");587 EXPECT_EQ(0x1ull, ex.GetHexMaxU32(false, 0));588 589 ex.Reset("001");590 EXPECT_EQ(0x1ull, ex.GetHexMaxU32(false, 0));591 592 ex.Reset("12");593 EXPECT_EQ(0x12ull, ex.GetHexMaxU32(false, 0));594 595 ex.Reset("123");596 EXPECT_EQ(0x123ull, ex.GetHexMaxU32(false, 0));597 598 ex.Reset("1203");599 EXPECT_EQ(0x1203ull, ex.GetHexMaxU32(false, 0));600 601 ex.Reset("1234");602 EXPECT_EQ(0x1234ull, ex.GetHexMaxU32(false, 0));603 604 ex.Reset("12340");605 EXPECT_EQ(0x12340ull, ex.GetHexMaxU32(false, 0));606 607 ex.Reset("123400");608 EXPECT_EQ(0x123400ull, ex.GetHexMaxU32(false, 0));609 610 ex.Reset("12345670");611 EXPECT_EQ(0x12345670ull, ex.GetHexMaxU32(false, 0));612 613 ex.Reset("123456700");614 EXPECT_EQ(0ull, ex.GetHexMaxU32(false, 0));615}616 617TEST_F(StringExtractorTest, GetU64LittleEndian) {618 StringExtractor ex("");619 EXPECT_EQ(0x0ull, ex.GetHexMaxU64(true, 0));620 621 ex.Reset("0");622 EXPECT_EQ(0x0ull, ex.GetHexMaxU64(true, 1));623 624 ex.Reset("1");625 EXPECT_EQ(0x1ull, ex.GetHexMaxU64(true, 0));626 627 ex.Reset("01");628 EXPECT_EQ(0x1ull, ex.GetHexMaxU64(true, 0));629 630 ex.Reset("001");631 EXPECT_EQ(0x100ull, ex.GetHexMaxU64(true, 0));632 633 ex.Reset("12");634 EXPECT_EQ(0x12ull, ex.GetHexMaxU64(true, 0));635 636 ex.Reset("123");637 EXPECT_EQ(0x312ull, ex.GetHexMaxU64(true, 0));638 639 ex.Reset("1203");640 EXPECT_EQ(0x312ull, ex.GetHexMaxU64(true, 0));641 642 ex.Reset("1234");643 EXPECT_EQ(0x3412ull, ex.GetHexMaxU64(true, 0));644 645 ex.Reset("12340");646 EXPECT_EQ(0x3412ull, ex.GetHexMaxU64(true, 0));647 648 ex.Reset("123400");649 EXPECT_EQ(0x3412ull, ex.GetHexMaxU64(true, 0));650 651 ex.Reset("123456789ABCDEF0");652 EXPECT_EQ(0xF0DEBC9A78563412ULL, ex.GetHexMaxU64(true, 0));653 654 ex.Reset("123456789ABCDEF01");655 EXPECT_EQ(0ull, ex.GetHexMaxU64(true, 0));656}657 658TEST_F(StringExtractorTest, GetU64BigEndian) {659 StringExtractor ex("");660 EXPECT_EQ(0x0ull, ex.GetHexMaxU64(false, 0));661 662 ex.Reset("0");663 EXPECT_EQ(0x0ull, ex.GetHexMaxU64(false, 1));664 665 ex.Reset("1");666 EXPECT_EQ(0x1ull, ex.GetHexMaxU64(false, 0));667 668 ex.Reset("01");669 EXPECT_EQ(0x1ull, ex.GetHexMaxU64(false, 0));670 671 ex.Reset("001");672 EXPECT_EQ(0x1ull, ex.GetHexMaxU64(false, 0));673 674 ex.Reset("12");675 EXPECT_EQ(0x12ull, ex.GetHexMaxU64(false, 0));676 677 ex.Reset("123");678 EXPECT_EQ(0x123ull, ex.GetHexMaxU64(false, 0));679 680 ex.Reset("1203");681 EXPECT_EQ(0x1203ull, ex.GetHexMaxU64(false, 0));682 683 ex.Reset("1234");684 EXPECT_EQ(0x1234ull, ex.GetHexMaxU64(false, 0));685 686 ex.Reset("12340");687 EXPECT_EQ(0x12340ull, ex.GetHexMaxU64(false, 0));688 689 ex.Reset("123400");690 EXPECT_EQ(0x123400ull, ex.GetHexMaxU64(false, 0));691 692 ex.Reset("123456789ABCDEF0");693 EXPECT_EQ(0x123456789ABCDEF0ULL, ex.GetHexMaxU64(false, 0));694 695 ex.Reset("123456789ABCDEF000");696 EXPECT_EQ(0ull, ex.GetHexMaxU64(false, 0));697}698