| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <errno.h> | 5 #include <errno.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 #include <stdio.h> | 7 #include <stdio.h> |
| 8 | 8 |
| 9 #include <cmath> | 9 #include <cmath> |
| 10 #include <limits> | 10 #include <limits> |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 static const struct { | 66 static const struct { |
| 67 uint64 input; | 67 uint64 input; |
| 68 std::string output; | 68 std::string output; |
| 69 } cases[] = { | 69 } cases[] = { |
| 70 {0, "0"}, | 70 {0, "0"}, |
| 71 {42, "42"}, | 71 {42, "42"}, |
| 72 {INT_MAX, "2147483647"}, | 72 {INT_MAX, "2147483647"}, |
| 73 {kuint64max, "18446744073709551615"}, | 73 {kuint64max, "18446744073709551615"}, |
| 74 }; | 74 }; |
| 75 | 75 |
| 76 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) | 76 for (size_t i = 0; i < arraysize(cases); ++i) |
| 77 EXPECT_EQ(cases[i].output, Uint64ToString(cases[i].input)); | 77 EXPECT_EQ(cases[i].output, Uint64ToString(cases[i].input)); |
| 78 } | 78 } |
| 79 | 79 |
| 80 TEST(StringNumberConversionsTest, SizeTToString) { | 80 TEST(StringNumberConversionsTest, SizeTToString) { |
| 81 size_t size_t_max = std::numeric_limits<size_t>::max(); | 81 size_t size_t_max = std::numeric_limits<size_t>::max(); |
| 82 std::string size_t_max_string = StringPrintf("%" PRIuS, size_t_max); | 82 std::string size_t_max_string = StringPrintf("%" PRIuS, size_t_max); |
| 83 | 83 |
| 84 static const struct { | 84 static const struct { |
| 85 size_t input; | 85 size_t input; |
| 86 std::string output; | 86 std::string output; |
| 87 } cases[] = { | 87 } cases[] = { |
| 88 {0, "0"}, | 88 {0, "0"}, |
| 89 {9, "9"}, | 89 {9, "9"}, |
| 90 {42, "42"}, | 90 {42, "42"}, |
| 91 {INT_MAX, "2147483647"}, | 91 {INT_MAX, "2147483647"}, |
| 92 {2147483648U, "2147483648"}, | 92 {2147483648U, "2147483648"}, |
| 93 #if SIZE_MAX > 4294967295U | 93 #if SIZE_MAX > 4294967295U |
| 94 {99999999999U, "99999999999"}, | 94 {99999999999U, "99999999999"}, |
| 95 #endif | 95 #endif |
| 96 {size_t_max, size_t_max_string}, | 96 {size_t_max, size_t_max_string}, |
| 97 }; | 97 }; |
| 98 | 98 |
| 99 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) | 99 for (size_t i = 0; i < arraysize(cases); ++i) |
| 100 EXPECT_EQ(cases[i].output, Uint64ToString(cases[i].input)); | 100 EXPECT_EQ(cases[i].output, Uint64ToString(cases[i].input)); |
| 101 } | 101 } |
| 102 | 102 |
| 103 TEST(StringNumberConversionsTest, StringToInt) { | 103 TEST(StringNumberConversionsTest, StringToInt) { |
| 104 static const struct { | 104 static const struct { |
| 105 std::string input; | 105 std::string input; |
| 106 int output; | 106 int output; |
| 107 bool success; | 107 bool success; |
| 108 } cases[] = { | 108 } cases[] = { |
| 109 {"0", 0, true}, | 109 {"0", 0, true}, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 125 {"++123", 0, false}, | 125 {"++123", 0, false}, |
| 126 {"-+123", 0, false}, | 126 {"-+123", 0, false}, |
| 127 {"+-123", 0, false}, | 127 {"+-123", 0, false}, |
| 128 {"-", 0, false}, | 128 {"-", 0, false}, |
| 129 {"-2147483649", INT_MIN, false}, | 129 {"-2147483649", INT_MIN, false}, |
| 130 {"-99999999999", INT_MIN, false}, | 130 {"-99999999999", INT_MIN, false}, |
| 131 {"2147483648", INT_MAX, false}, | 131 {"2147483648", INT_MAX, false}, |
| 132 {"99999999999", INT_MAX, false}, | 132 {"99999999999", INT_MAX, false}, |
| 133 }; | 133 }; |
| 134 | 134 |
| 135 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 135 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 136 int output = 0; | 136 int output = 0; |
| 137 EXPECT_EQ(cases[i].success, StringToInt(cases[i].input, &output)); | 137 EXPECT_EQ(cases[i].success, StringToInt(cases[i].input, &output)); |
| 138 EXPECT_EQ(cases[i].output, output); | 138 EXPECT_EQ(cases[i].output, output); |
| 139 | 139 |
| 140 string16 utf16_input = UTF8ToUTF16(cases[i].input); | 140 string16 utf16_input = UTF8ToUTF16(cases[i].input); |
| 141 output = 0; | 141 output = 0; |
| 142 EXPECT_EQ(cases[i].success, StringToInt(utf16_input, &output)); | 142 EXPECT_EQ(cases[i].success, StringToInt(utf16_input, &output)); |
| 143 EXPECT_EQ(cases[i].output, output); | 143 EXPECT_EQ(cases[i].output, output); |
| 144 } | 144 } |
| 145 | 145 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 {"-+123", 0, false}, | 189 {"-+123", 0, false}, |
| 190 {"+-123", 0, false}, | 190 {"+-123", 0, false}, |
| 191 {"-", 0, false}, | 191 {"-", 0, false}, |
| 192 {"-2147483649", 0, false}, | 192 {"-2147483649", 0, false}, |
| 193 {"-99999999999", 0, false}, | 193 {"-99999999999", 0, false}, |
| 194 {"4294967295", UINT_MAX, true}, | 194 {"4294967295", UINT_MAX, true}, |
| 195 {"4294967296", UINT_MAX, false}, | 195 {"4294967296", UINT_MAX, false}, |
| 196 {"99999999999", UINT_MAX, false}, | 196 {"99999999999", UINT_MAX, false}, |
| 197 }; | 197 }; |
| 198 | 198 |
| 199 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 199 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 200 unsigned output = 0; | 200 unsigned output = 0; |
| 201 EXPECT_EQ(cases[i].success, StringToUint(cases[i].input, &output)); | 201 EXPECT_EQ(cases[i].success, StringToUint(cases[i].input, &output)); |
| 202 EXPECT_EQ(cases[i].output, output); | 202 EXPECT_EQ(cases[i].output, output); |
| 203 | 203 |
| 204 string16 utf16_input = UTF8ToUTF16(cases[i].input); | 204 string16 utf16_input = UTF8ToUTF16(cases[i].input); |
| 205 output = 0; | 205 output = 0; |
| 206 EXPECT_EQ(cases[i].success, StringToUint(utf16_input, &output)); | 206 EXPECT_EQ(cases[i].success, StringToUint(utf16_input, &output)); |
| 207 EXPECT_EQ(cases[i].output, output); | 207 EXPECT_EQ(cases[i].output, output); |
| 208 } | 208 } |
| 209 | 209 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 {"++123", 0, false}, | 259 {"++123", 0, false}, |
| 260 {"-+123", 0, false}, | 260 {"-+123", 0, false}, |
| 261 {"+-123", 0, false}, | 261 {"+-123", 0, false}, |
| 262 {"-", 0, false}, | 262 {"-", 0, false}, |
| 263 {"-9223372036854775809", kint64min, false}, | 263 {"-9223372036854775809", kint64min, false}, |
| 264 {"-99999999999999999999", kint64min, false}, | 264 {"-99999999999999999999", kint64min, false}, |
| 265 {"9223372036854775808", kint64max, false}, | 265 {"9223372036854775808", kint64max, false}, |
| 266 {"99999999999999999999", kint64max, false}, | 266 {"99999999999999999999", kint64max, false}, |
| 267 }; | 267 }; |
| 268 | 268 |
| 269 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 269 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 270 int64 output = 0; | 270 int64 output = 0; |
| 271 EXPECT_EQ(cases[i].success, StringToInt64(cases[i].input, &output)); | 271 EXPECT_EQ(cases[i].success, StringToInt64(cases[i].input, &output)); |
| 272 EXPECT_EQ(cases[i].output, output); | 272 EXPECT_EQ(cases[i].output, output); |
| 273 | 273 |
| 274 string16 utf16_input = UTF8ToUTF16(cases[i].input); | 274 string16 utf16_input = UTF8ToUTF16(cases[i].input); |
| 275 output = 0; | 275 output = 0; |
| 276 EXPECT_EQ(cases[i].success, StringToInt64(utf16_input, &output)); | 276 EXPECT_EQ(cases[i].success, StringToInt64(utf16_input, &output)); |
| 277 EXPECT_EQ(cases[i].output, output); | 277 EXPECT_EQ(cases[i].output, output); |
| 278 } | 278 } |
| 279 | 279 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 {"+-123", 0, false}, | 326 {"+-123", 0, false}, |
| 327 {"-", 0, false}, | 327 {"-", 0, false}, |
| 328 {"-9223372036854775809", 0, false}, | 328 {"-9223372036854775809", 0, false}, |
| 329 {"-99999999999999999999", 0, false}, | 329 {"-99999999999999999999", 0, false}, |
| 330 {"9223372036854775808", GG_UINT64_C(9223372036854775808), true}, | 330 {"9223372036854775808", GG_UINT64_C(9223372036854775808), true}, |
| 331 {"99999999999999999999", kuint64max, false}, | 331 {"99999999999999999999", kuint64max, false}, |
| 332 {"18446744073709551615", kuint64max, true}, | 332 {"18446744073709551615", kuint64max, true}, |
| 333 {"18446744073709551616", kuint64max, false}, | 333 {"18446744073709551616", kuint64max, false}, |
| 334 }; | 334 }; |
| 335 | 335 |
| 336 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 336 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 337 uint64 output = 0; | 337 uint64 output = 0; |
| 338 EXPECT_EQ(cases[i].success, StringToUint64(cases[i].input, &output)); | 338 EXPECT_EQ(cases[i].success, StringToUint64(cases[i].input, &output)); |
| 339 EXPECT_EQ(cases[i].output, output); | 339 EXPECT_EQ(cases[i].output, output); |
| 340 | 340 |
| 341 string16 utf16_input = UTF8ToUTF16(cases[i].input); | 341 string16 utf16_input = UTF8ToUTF16(cases[i].input); |
| 342 output = 0; | 342 output = 0; |
| 343 EXPECT_EQ(cases[i].success, StringToUint64(utf16_input, &output)); | 343 EXPECT_EQ(cases[i].success, StringToUint64(utf16_input, &output)); |
| 344 EXPECT_EQ(cases[i].output, output); | 344 EXPECT_EQ(cases[i].output, output); |
| 345 } | 345 } |
| 346 | 346 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 {"++123", 0, false}, | 395 {"++123", 0, false}, |
| 396 {"-+123", 0, false}, | 396 {"-+123", 0, false}, |
| 397 {"+-123", 0, false}, | 397 {"+-123", 0, false}, |
| 398 {"-", 0, false}, | 398 {"-", 0, false}, |
| 399 {"-9223372036854775809", 0, false}, | 399 {"-9223372036854775809", 0, false}, |
| 400 {"-99999999999999999999", 0, false}, | 400 {"-99999999999999999999", 0, false}, |
| 401 {"999999999999999999999999", size_t_max, false}, | 401 {"999999999999999999999999", size_t_max, false}, |
| 402 {size_t_max_string, size_t_max, true}, | 402 {size_t_max_string, size_t_max, true}, |
| 403 }; | 403 }; |
| 404 | 404 |
| 405 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 405 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 406 size_t output = 0; | 406 size_t output = 0; |
| 407 EXPECT_EQ(cases[i].success, StringToSizeT(cases[i].input, &output)); | 407 EXPECT_EQ(cases[i].success, StringToSizeT(cases[i].input, &output)); |
| 408 EXPECT_EQ(cases[i].output, output); | 408 EXPECT_EQ(cases[i].output, output); |
| 409 | 409 |
| 410 string16 utf16_input = UTF8ToUTF16(cases[i].input); | 410 string16 utf16_input = UTF8ToUTF16(cases[i].input); |
| 411 output = 0; | 411 output = 0; |
| 412 EXPECT_EQ(cases[i].success, StringToSizeT(utf16_input, &output)); | 412 EXPECT_EQ(cases[i].success, StringToSizeT(utf16_input, &output)); |
| 413 EXPECT_EQ(cases[i].output, output); | 413 EXPECT_EQ(cases[i].output, output); |
| 414 } | 414 } |
| 415 | 415 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 {"45 ", 0x45, false}, | 458 {"45 ", 0x45, false}, |
| 459 {"45:", 0x45, false}, | 459 {"45:", 0x45, false}, |
| 460 {"efgh", 0xef, false}, | 460 {"efgh", 0xef, false}, |
| 461 {"0xefgh", 0xef, false}, | 461 {"0xefgh", 0xef, false}, |
| 462 {"hgfe", 0, false}, | 462 {"hgfe", 0, false}, |
| 463 {"-", 0, false}, | 463 {"-", 0, false}, |
| 464 {"", 0, false}, | 464 {"", 0, false}, |
| 465 {"0x", 0, false}, | 465 {"0x", 0, false}, |
| 466 }; | 466 }; |
| 467 | 467 |
| 468 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 468 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 469 int output = 0; | 469 int output = 0; |
| 470 EXPECT_EQ(cases[i].success, HexStringToInt(cases[i].input, &output)); | 470 EXPECT_EQ(cases[i].success, HexStringToInt(cases[i].input, &output)); |
| 471 EXPECT_EQ(cases[i].output, output); | 471 EXPECT_EQ(cases[i].output, output); |
| 472 } | 472 } |
| 473 // One additional test to verify that conversion of numbers in strings with | 473 // One additional test to verify that conversion of numbers in strings with |
| 474 // embedded NUL characters. The NUL and extra data after it should be | 474 // embedded NUL characters. The NUL and extra data after it should be |
| 475 // interpreted as junk after the number. | 475 // interpreted as junk after the number. |
| 476 const char input[] = "0xc0ffee\0" "9"; | 476 const char input[] = "0xc0ffee\0" "9"; |
| 477 std::string input_string(input, arraysize(input) - 1); | 477 std::string input_string(input, arraysize(input) - 1); |
| 478 int output; | 478 int output; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 {"45 ", 0x45, false}, | 518 {"45 ", 0x45, false}, |
| 519 {"45:", 0x45, false}, | 519 {"45:", 0x45, false}, |
| 520 {"efgh", 0xef, false}, | 520 {"efgh", 0xef, false}, |
| 521 {"0xefgh", 0xef, false}, | 521 {"0xefgh", 0xef, false}, |
| 522 {"hgfe", 0, false}, | 522 {"hgfe", 0, false}, |
| 523 {"-", 0, false}, | 523 {"-", 0, false}, |
| 524 {"", 0, false}, | 524 {"", 0, false}, |
| 525 {"0x", 0, false}, | 525 {"0x", 0, false}, |
| 526 }; | 526 }; |
| 527 | 527 |
| 528 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 528 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 529 uint32 output = 0; | 529 uint32 output = 0; |
| 530 EXPECT_EQ(cases[i].success, HexStringToUInt(cases[i].input, &output)); | 530 EXPECT_EQ(cases[i].success, HexStringToUInt(cases[i].input, &output)); |
| 531 EXPECT_EQ(cases[i].output, output); | 531 EXPECT_EQ(cases[i].output, output); |
| 532 } | 532 } |
| 533 // One additional test to verify that conversion of numbers in strings with | 533 // One additional test to verify that conversion of numbers in strings with |
| 534 // embedded NUL characters. The NUL and extra data after it should be | 534 // embedded NUL characters. The NUL and extra data after it should be |
| 535 // interpreted as junk after the number. | 535 // interpreted as junk after the number. |
| 536 const char input[] = "0xc0ffee\0" "9"; | 536 const char input[] = "0xc0ffee\0" "9"; |
| 537 std::string input_string(input, arraysize(input) - 1); | 537 std::string input_string(input, arraysize(input) - 1); |
| 538 uint32 output; | 538 uint32 output; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 575 {"45 ", 0x45, false}, | 575 {"45 ", 0x45, false}, |
| 576 {"45:", 0x45, false}, | 576 {"45:", 0x45, false}, |
| 577 {"efgh", 0xef, false}, | 577 {"efgh", 0xef, false}, |
| 578 {"0xefgh", 0xef, false}, | 578 {"0xefgh", 0xef, false}, |
| 579 {"hgfe", 0, false}, | 579 {"hgfe", 0, false}, |
| 580 {"-", 0, false}, | 580 {"-", 0, false}, |
| 581 {"", 0, false}, | 581 {"", 0, false}, |
| 582 {"0x", 0, false}, | 582 {"0x", 0, false}, |
| 583 }; | 583 }; |
| 584 | 584 |
| 585 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 585 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 586 int64 output = 0; | 586 int64 output = 0; |
| 587 EXPECT_EQ(cases[i].success, HexStringToInt64(cases[i].input, &output)); | 587 EXPECT_EQ(cases[i].success, HexStringToInt64(cases[i].input, &output)); |
| 588 EXPECT_EQ(cases[i].output, output); | 588 EXPECT_EQ(cases[i].output, output); |
| 589 } | 589 } |
| 590 // One additional test to verify that conversion of numbers in strings with | 590 // One additional test to verify that conversion of numbers in strings with |
| 591 // embedded NUL characters. The NUL and extra data after it should be | 591 // embedded NUL characters. The NUL and extra data after it should be |
| 592 // interpreted as junk after the number. | 592 // interpreted as junk after the number. |
| 593 const char input[] = "0xc0ffee\0" "9"; | 593 const char input[] = "0xc0ffee\0" "9"; |
| 594 std::string input_string(input, arraysize(input) - 1); | 594 std::string input_string(input, arraysize(input) - 1); |
| 595 int64 output; | 595 int64 output; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 637 {"45 ", 0x45, false}, | 637 {"45 ", 0x45, false}, |
| 638 {"45:", 0x45, false}, | 638 {"45:", 0x45, false}, |
| 639 {"efgh", 0xef, false}, | 639 {"efgh", 0xef, false}, |
| 640 {"0xefgh", 0xef, false}, | 640 {"0xefgh", 0xef, false}, |
| 641 {"hgfe", 0, false}, | 641 {"hgfe", 0, false}, |
| 642 {"-", 0, false}, | 642 {"-", 0, false}, |
| 643 {"", 0, false}, | 643 {"", 0, false}, |
| 644 {"0x", 0, false}, | 644 {"0x", 0, false}, |
| 645 }; | 645 }; |
| 646 | 646 |
| 647 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 647 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 648 uint64 output = 0; | 648 uint64 output = 0; |
| 649 EXPECT_EQ(cases[i].success, HexStringToUInt64(cases[i].input, &output)); | 649 EXPECT_EQ(cases[i].success, HexStringToUInt64(cases[i].input, &output)); |
| 650 EXPECT_EQ(cases[i].output, output); | 650 EXPECT_EQ(cases[i].output, output); |
| 651 } | 651 } |
| 652 // One additional test to verify that conversion of numbers in strings with | 652 // One additional test to verify that conversion of numbers in strings with |
| 653 // embedded NUL characters. The NUL and extra data after it should be | 653 // embedded NUL characters. The NUL and extra data after it should be |
| 654 // interpreted as junk after the number. | 654 // interpreted as junk after the number. |
| 655 const char input[] = "0xc0ffee\0" "9"; | 655 const char input[] = "0xc0ffee\0" "9"; |
| 656 std::string input_string(input, arraysize(input) - 1); | 656 std::string input_string(input, arraysize(input) - 1); |
| 657 uint64 output; | 657 uint64 output; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 679 {"0f", "\xf", 1, true}, | 679 {"0f", "\xf", 1, true}, |
| 680 {"45 ", "\x45", 1, false}, | 680 {"45 ", "\x45", 1, false}, |
| 681 {"efgh", "\xef", 1, false}, | 681 {"efgh", "\xef", 1, false}, |
| 682 {"", "", 0, false}, | 682 {"", "", 0, false}, |
| 683 {"0123456789ABCDEF", "\x01\x23\x45\x67\x89\xAB\xCD\xEF", 8, true}, | 683 {"0123456789ABCDEF", "\x01\x23\x45\x67\x89\xAB\xCD\xEF", 8, true}, |
| 684 {"0123456789ABCDEF012345", | 684 {"0123456789ABCDEF012345", |
| 685 "\x01\x23\x45\x67\x89\xAB\xCD\xEF\x01\x23\x45", 11, true}, | 685 "\x01\x23\x45\x67\x89\xAB\xCD\xEF\x01\x23\x45", 11, true}, |
| 686 }; | 686 }; |
| 687 | 687 |
| 688 | 688 |
| 689 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 689 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 690 std::vector<uint8> output; | 690 std::vector<uint8> output; |
| 691 std::vector<uint8> compare; | 691 std::vector<uint8> compare; |
| 692 EXPECT_EQ(cases[i].success, HexStringToBytes(cases[i].input, &output)) << | 692 EXPECT_EQ(cases[i].success, HexStringToBytes(cases[i].input, &output)) << |
| 693 i << ": " << cases[i].input; | 693 i << ": " << cases[i].input; |
| 694 for (size_t j = 0; j < cases[i].output_len; ++j) | 694 for (size_t j = 0; j < cases[i].output_len; ++j) |
| 695 compare.push_back(static_cast<uint8>(cases[i].output[j])); | 695 compare.push_back(static_cast<uint8>(cases[i].output[j])); |
| 696 ASSERT_EQ(output.size(), compare.size()) << i << ": " << cases[i].input; | 696 ASSERT_EQ(output.size(), compare.size()) << i << ": " << cases[i].input; |
| 697 EXPECT_TRUE(std::equal(output.begin(), output.end(), compare.begin())) << | 697 EXPECT_TRUE(std::equal(output.begin(), output.end(), compare.begin())) << |
| 698 i << ": " << cases[i].input; | 698 i << ": " << cases[i].input; |
| 699 } | 699 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 728 {"123e ", 123.0, false}, | 728 {"123e ", 123.0, false}, |
| 729 {"123e", 123.0, false}, | 729 {"123e", 123.0, false}, |
| 730 {" 2.99", 2.99, false}, | 730 {" 2.99", 2.99, false}, |
| 731 {"1e3.4", 1000.0, false}, | 731 {"1e3.4", 1000.0, false}, |
| 732 {"nothing", 0.0, false}, | 732 {"nothing", 0.0, false}, |
| 733 {"-", 0.0, false}, | 733 {"-", 0.0, false}, |
| 734 {"+", 0.0, false}, | 734 {"+", 0.0, false}, |
| 735 {"", 0.0, false}, | 735 {"", 0.0, false}, |
| 736 }; | 736 }; |
| 737 | 737 |
| 738 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 738 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 739 double output; | 739 double output; |
| 740 errno = 1; | 740 errno = 1; |
| 741 EXPECT_EQ(cases[i].success, StringToDouble(cases[i].input, &output)); | 741 EXPECT_EQ(cases[i].success, StringToDouble(cases[i].input, &output)); |
| 742 if (cases[i].success) | 742 if (cases[i].success) |
| 743 EXPECT_EQ(1, errno) << i; // confirm that errno is unchanged. | 743 EXPECT_EQ(1, errno) << i; // confirm that errno is unchanged. |
| 744 EXPECT_DOUBLE_EQ(cases[i].output, output); | 744 EXPECT_DOUBLE_EQ(cases[i].output, output); |
| 745 } | 745 } |
| 746 | 746 |
| 747 // One additional test to verify that conversion of numbers in strings with | 747 // One additional test to verify that conversion of numbers in strings with |
| 748 // embedded NUL characters. The NUL and extra data after it should be | 748 // embedded NUL characters. The NUL and extra data after it should be |
| (...skipping 12 matching lines...) Expand all Loading... |
| 761 } cases[] = { | 761 } cases[] = { |
| 762 {0.0, "0"}, | 762 {0.0, "0"}, |
| 763 {1.25, "1.25"}, | 763 {1.25, "1.25"}, |
| 764 {1.33518e+012, "1.33518e+12"}, | 764 {1.33518e+012, "1.33518e+12"}, |
| 765 {1.33489e+012, "1.33489e+12"}, | 765 {1.33489e+012, "1.33489e+12"}, |
| 766 {1.33505e+012, "1.33505e+12"}, | 766 {1.33505e+012, "1.33505e+12"}, |
| 767 {1.33545e+009, "1335450000"}, | 767 {1.33545e+009, "1335450000"}, |
| 768 {1.33503e+009, "1335030000"}, | 768 {1.33503e+009, "1335030000"}, |
| 769 }; | 769 }; |
| 770 | 770 |
| 771 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { | 771 for (size_t i = 0; i < arraysize(cases); ++i) { |
| 772 EXPECT_EQ(cases[i].expected, DoubleToString(cases[i].input)); | 772 EXPECT_EQ(cases[i].expected, DoubleToString(cases[i].input)); |
| 773 } | 773 } |
| 774 | 774 |
| 775 // The following two values were seen in crashes in the wild. | 775 // The following two values were seen in crashes in the wild. |
| 776 const char input_bytes[8] = {0, 0, 0, 0, '\xee', '\x6d', '\x73', '\x42'}; | 776 const char input_bytes[8] = {0, 0, 0, 0, '\xee', '\x6d', '\x73', '\x42'}; |
| 777 double input = 0; | 777 double input = 0; |
| 778 memcpy(&input, input_bytes, arraysize(input_bytes)); | 778 memcpy(&input, input_bytes, arraysize(input_bytes)); |
| 779 EXPECT_EQ("1335179083776", DoubleToString(input)); | 779 EXPECT_EQ("1335179083776", DoubleToString(input)); |
| 780 const char input_bytes2[8] = | 780 const char input_bytes2[8] = |
| 781 {0, 0, 0, '\xa0', '\xda', '\x6c', '\x73', '\x42'}; | 781 {0, 0, 0, '\xa0', '\xda', '\x6c', '\x73', '\x42'}; |
| 782 input = 0; | 782 input = 0; |
| 783 memcpy(&input, input_bytes2, arraysize(input_bytes2)); | 783 memcpy(&input, input_bytes2, arraysize(input_bytes2)); |
| 784 EXPECT_EQ("1334890332160", DoubleToString(input)); | 784 EXPECT_EQ("1334890332160", DoubleToString(input)); |
| 785 } | 785 } |
| 786 | 786 |
| 787 TEST(StringNumberConversionsTest, HexEncode) { | 787 TEST(StringNumberConversionsTest, HexEncode) { |
| 788 std::string hex(HexEncode(NULL, 0)); | 788 std::string hex(HexEncode(NULL, 0)); |
| 789 EXPECT_EQ(hex.length(), 0U); | 789 EXPECT_EQ(hex.length(), 0U); |
| 790 unsigned char bytes[] = {0x01, 0xff, 0x02, 0xfe, 0x03, 0x80, 0x81}; | 790 unsigned char bytes[] = {0x01, 0xff, 0x02, 0xfe, 0x03, 0x80, 0x81}; |
| 791 hex = HexEncode(bytes, sizeof(bytes)); | 791 hex = HexEncode(bytes, sizeof(bytes)); |
| 792 EXPECT_EQ(hex.compare("01FF02FE038081"), 0); | 792 EXPECT_EQ(hex.compare("01FF02FE038081"), 0); |
| 793 } | 793 } |
| 794 | 794 |
| 795 } // namespace base | 795 } // namespace base |
| OLD | NEW |