| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
| 6 #include "vm/assembler.h" | 6 #include "vm/assembler.h" |
| 7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
| 8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
| 9 #include "vm/isolate.h" | 9 #include "vm/isolate.h" |
| 10 #include "vm/object.h" | 10 #include "vm/object.h" |
| (...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 const String& sub1 = String::Handle(String::SubString(str8, kCharsIndex)); | 558 const String& sub1 = String::Handle(String::SubString(str8, kCharsIndex)); |
| 559 EXPECT_EQ((kCharsLen - kCharsIndex), sub1.Length()); | 559 EXPECT_EQ((kCharsLen - kCharsIndex), sub1.Length()); |
| 560 EXPECT_EQ(64, sub1.CharAt(0)); | 560 EXPECT_EQ(64, sub1.CharAt(0)); |
| 561 EXPECT_EQ(92, sub1.CharAt(1)); | 561 EXPECT_EQ(92, sub1.CharAt(1)); |
| 562 EXPECT_EQ(0, sub1.CharAt(2)); | 562 EXPECT_EQ(0, sub1.CharAt(2)); |
| 563 EXPECT_EQ(55, sub1.CharAt(3)); | 563 EXPECT_EQ(55, sub1.CharAt(3)); |
| 564 EXPECT_EQ(55, sub1.CharAt(4)); | 564 EXPECT_EQ(55, sub1.CharAt(4)); |
| 565 | 565 |
| 566 const intptr_t kWideCharsLen = 7; | 566 const intptr_t kWideCharsLen = 7; |
| 567 uint16_t wide_chars[kWideCharsLen] = { 'H', 'e', 'l', 'l', 'o', 256, '!' }; | 567 uint16_t wide_chars[kWideCharsLen] = { 'H', 'e', 'l', 'l', 'o', 256, '!' }; |
| 568 const String& two_str = String::Handle(String::New(wide_chars, | 568 const String& two_str = String::Handle(String::FromUTF16(wide_chars, |
| 569 kWideCharsLen)); | 569 kWideCharsLen)); |
| 570 EXPECT(two_str.IsInstance()); | 570 EXPECT(two_str.IsInstance()); |
| 571 EXPECT(two_str.IsString()); | 571 EXPECT(two_str.IsString()); |
| 572 EXPECT(two_str.IsTwoByteString()); | 572 EXPECT(two_str.IsTwoByteString()); |
| 573 EXPECT(!two_str.IsOneByteString()); | 573 EXPECT(!two_str.IsOneByteString()); |
| 574 EXPECT_EQ(kWideCharsLen, two_str.Length()); | 574 EXPECT_EQ(kWideCharsLen, two_str.Length()); |
| 575 EXPECT_EQ('H', two_str.CharAt(0)); | 575 EXPECT_EQ('H', two_str.CharAt(0)); |
| 576 EXPECT_EQ(256, two_str.CharAt(5)); | 576 EXPECT_EQ(256, two_str.CharAt(5)); |
| 577 const intptr_t kWideCharsIndex = 3; | 577 const intptr_t kWideCharsIndex = 3; |
| 578 const String& sub2 = String::Handle(String::SubString(two_str, kCharsIndex)); | 578 const String& sub2 = String::Handle(String::SubString(two_str, kCharsIndex)); |
| 579 EXPECT_EQ((kWideCharsLen - kWideCharsIndex), sub2.Length()); | 579 EXPECT_EQ((kWideCharsLen - kWideCharsIndex), sub2.Length()); |
| 580 EXPECT_EQ('l', sub2.CharAt(0)); | 580 EXPECT_EQ('l', sub2.CharAt(0)); |
| 581 EXPECT_EQ('o', sub2.CharAt(1)); | 581 EXPECT_EQ('o', sub2.CharAt(1)); |
| 582 EXPECT_EQ(256, sub2.CharAt(2)); | 582 EXPECT_EQ(256, sub2.CharAt(2)); |
| 583 EXPECT_EQ('!', sub2.CharAt(3)); | 583 EXPECT_EQ('!', sub2.CharAt(3)); |
| 584 | 584 |
| 585 { | 585 { |
| 586 const String& str1 = String::Handle(String::New("My.create")); | 586 const String& str1 = String::Handle(String::New("My.create")); |
| 587 const String& str2 = String::Handle(String::New("My")); | 587 const String& str2 = String::Handle(String::New("My")); |
| 588 const String& str3 = String::Handle(String::New("create")); | 588 const String& str3 = String::Handle(String::New("create")); |
| 589 EXPECT_EQ(true, str1.StartsWith(str2)); | 589 EXPECT_EQ(true, str1.StartsWith(str2)); |
| 590 EXPECT_EQ(false, str1.StartsWith(str3)); | 590 EXPECT_EQ(false, str1.StartsWith(str3)); |
| 591 } | 591 } |
| 592 | 592 |
| 593 const int32_t four_chars[] = { 'C', 0xFF, 'h', 0xFFFF, 'a', 0x10FFFF, 'r' }; | 593 const int32_t four_chars[] = { 'C', 0xFF, 'h', 0xFFFF, 'a', 0x10FFFF, 'r' }; |
| 594 const String& four_str = String::Handle(String::New(four_chars, 7)); | 594 const String& four_str = String::Handle(String::FromUTF32(four_chars, 7)); |
| 595 EXPECT_EQ(four_str.Hash(), four_str.Hash()); | 595 EXPECT_EQ(four_str.Hash(), four_str.Hash()); |
| 596 EXPECT(four_str.IsTwoByteString()); | 596 EXPECT(four_str.IsTwoByteString()); |
| 597 EXPECT(!four_str.IsOneByteString()); | 597 EXPECT(!four_str.IsOneByteString()); |
| 598 EXPECT_EQ(8, four_str.Length()); | 598 EXPECT_EQ(8, four_str.Length()); |
| 599 EXPECT_EQ('C', four_str.CharAt(0)); | 599 EXPECT_EQ('C', four_str.CharAt(0)); |
| 600 EXPECT_EQ(0xFF, four_str.CharAt(1)); | 600 EXPECT_EQ(0xFF, four_str.CharAt(1)); |
| 601 EXPECT_EQ('h', four_str.CharAt(2)); | 601 EXPECT_EQ('h', four_str.CharAt(2)); |
| 602 EXPECT_EQ(0xFFFF, four_str.CharAt(3)); | 602 EXPECT_EQ(0xFFFF, four_str.CharAt(3)); |
| 603 EXPECT_EQ('a', four_str.CharAt(4)); | 603 EXPECT_EQ('a', four_str.CharAt(4)); |
| 604 EXPECT_EQ(0xDBFF, four_str.CharAt(5)); | 604 EXPECT_EQ(0xDBFF, four_str.CharAt(5)); |
| 605 EXPECT_EQ(0xDFFF, four_str.CharAt(6)); | 605 EXPECT_EQ(0xDFFF, four_str.CharAt(6)); |
| 606 EXPECT_EQ('r', four_str.CharAt(7)); | 606 EXPECT_EQ('r', four_str.CharAt(7)); |
| 607 | 607 |
| 608 // Create a 1-byte string from an array of 2-byte elements. | 608 // Create a 1-byte string from an array of 2-byte elements. |
| 609 { | 609 { |
| 610 const uint16_t char16[] = { 0x00, 0x7F, 0xFF }; | 610 const uint16_t char16[] = { 0x00, 0x7F, 0xFF }; |
| 611 const String& str8 = String::Handle(String::New(char16, 3)); | 611 const String& str8 = String::Handle(String::FromUTF16(char16, 3)); |
| 612 EXPECT(str8.IsOneByteString()); | 612 EXPECT(str8.IsOneByteString()); |
| 613 EXPECT(!str8.IsTwoByteString()); | 613 EXPECT(!str8.IsTwoByteString()); |
| 614 EXPECT_EQ(0x00, str8.CharAt(0)); | 614 EXPECT_EQ(0x00, str8.CharAt(0)); |
| 615 EXPECT_EQ(0x7F, str8.CharAt(1)); | 615 EXPECT_EQ(0x7F, str8.CharAt(1)); |
| 616 EXPECT_EQ(0xFF, str8.CharAt(2)); | 616 EXPECT_EQ(0xFF, str8.CharAt(2)); |
| 617 } | 617 } |
| 618 | 618 |
| 619 // Create a 1-byte string from an array of 4-byte elements. | 619 // Create a 1-byte string from an array of 4-byte elements. |
| 620 { | 620 { |
| 621 const int32_t char32[] = { 0x00, 0x1F, 0x7F }; | 621 const int32_t char32[] = { 0x00, 0x1F, 0x7F }; |
| 622 const String& str8 = String::Handle(String::New(char32, 3)); | 622 const String& str8 = String::Handle(String::FromUTF32(char32, 3)); |
| 623 EXPECT(str8.IsOneByteString()); | 623 EXPECT(str8.IsOneByteString()); |
| 624 EXPECT(!str8.IsTwoByteString()); | 624 EXPECT(!str8.IsTwoByteString()); |
| 625 EXPECT_EQ(0x00, str8.CharAt(0)); | 625 EXPECT_EQ(0x00, str8.CharAt(0)); |
| 626 EXPECT_EQ(0x1F, str8.CharAt(1)); | 626 EXPECT_EQ(0x1F, str8.CharAt(1)); |
| 627 EXPECT_EQ(0x7F, str8.CharAt(2)); | 627 EXPECT_EQ(0x7F, str8.CharAt(2)); |
| 628 } | 628 } |
| 629 | 629 |
| 630 // Create a 2-byte string from an array of 4-byte elements. | 630 // Create a 2-byte string from an array of 4-byte elements. |
| 631 { | 631 { |
| 632 const int32_t char32[] = { 0, 0x7FFF, 0xFFFF }; | 632 const int32_t char32[] = { 0, 0x7FFF, 0xFFFF }; |
| 633 const String& str16 = String::Handle(String::New(char32, 3)); | 633 const String& str16 = String::Handle(String::FromUTF32(char32, 3)); |
| 634 EXPECT(!str16.IsOneByteString()); | 634 EXPECT(!str16.IsOneByteString()); |
| 635 EXPECT(str16.IsTwoByteString()); | 635 EXPECT(str16.IsTwoByteString()); |
| 636 EXPECT_EQ(0x0000, str16.CharAt(0)); | 636 EXPECT_EQ(0x0000, str16.CharAt(0)); |
| 637 EXPECT_EQ(0x7FFF, str16.CharAt(1)); | 637 EXPECT_EQ(0x7FFF, str16.CharAt(1)); |
| 638 EXPECT_EQ(0xFFFF, str16.CharAt(2)); | 638 EXPECT_EQ(0xFFFF, str16.CharAt(2)); |
| 639 } | 639 } |
| 640 } | 640 } |
| 641 | 641 |
| 642 | 642 |
| 643 TEST_CASE(StringFormat) { | 643 TEST_CASE(StringFormat) { |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 } | 829 } |
| 830 | 830 |
| 831 // Concatenate empty and non-empty 2-byte strings. | 831 // Concatenate empty and non-empty 2-byte strings. |
| 832 { | 832 { |
| 833 const String& str1 = String::Handle(String::New("")); | 833 const String& str1 = String::Handle(String::New("")); |
| 834 EXPECT(str1.IsOneByteString()); | 834 EXPECT(str1.IsOneByteString()); |
| 835 EXPECT_EQ(0, str1.Length()); | 835 EXPECT_EQ(0, str1.Length()); |
| 836 | 836 |
| 837 uint16_t two[] = { 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; | 837 uint16_t two[] = { 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; |
| 838 intptr_t two_len = sizeof(two) / sizeof(two[0]); | 838 intptr_t two_len = sizeof(two) / sizeof(two[0]); |
| 839 const String& str2 = String::Handle(String::New(two, two_len)); | 839 const String& str2 = String::Handle(String::FromUTF16(two, two_len)); |
| 840 EXPECT(str2.IsTwoByteString()); | 840 EXPECT(str2.IsTwoByteString()); |
| 841 EXPECT_EQ(two_len, str2.Length()); | 841 EXPECT_EQ(two_len, str2.Length()); |
| 842 | 842 |
| 843 // Concat | 843 // Concat |
| 844 | 844 |
| 845 const String& str3 = String::Handle(String::Concat(str1, str2)); | 845 const String& str3 = String::Handle(String::Concat(str1, str2)); |
| 846 EXPECT(str3.IsTwoByteString()); | 846 EXPECT(str3.IsTwoByteString()); |
| 847 EXPECT_EQ(two_len, str3.Length()); | 847 EXPECT_EQ(two_len, str3.Length()); |
| 848 EXPECT(str3.Equals(str2)); | 848 EXPECT(str3.Equals(str2)); |
| 849 | 849 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 884 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; | 884 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; |
| 885 intptr_t twotwo_len = sizeof(twotwo) / sizeof(twotwo[0]); | 885 intptr_t twotwo_len = sizeof(twotwo) / sizeof(twotwo[0]); |
| 886 EXPECT(str7.IsTwoByteString()); | 886 EXPECT(str7.IsTwoByteString()); |
| 887 EXPECT(str7.Equals(twotwo, twotwo_len)); | 887 EXPECT(str7.Equals(twotwo, twotwo_len)); |
| 888 } | 888 } |
| 889 | 889 |
| 890 // Concatenating non-empty 2-byte strings. | 890 // Concatenating non-empty 2-byte strings. |
| 891 { | 891 { |
| 892 const uint16_t one[] = { 0x05D0, 0x05D9, 0x05D9, 0x05DF }; | 892 const uint16_t one[] = { 0x05D0, 0x05D9, 0x05D9, 0x05DF }; |
| 893 intptr_t one_len = sizeof(one) / sizeof(one[0]); | 893 intptr_t one_len = sizeof(one) / sizeof(one[0]); |
| 894 const String& str1 = String::Handle(String::New(one, one_len)); | 894 const String& str1 = String::Handle(String::FromUTF16(one, one_len)); |
| 895 EXPECT(str1.IsTwoByteString()); | 895 EXPECT(str1.IsTwoByteString()); |
| 896 EXPECT_EQ(one_len, str1.Length()); | 896 EXPECT_EQ(one_len, str1.Length()); |
| 897 | 897 |
| 898 const uint16_t two[] = { 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; | 898 const uint16_t two[] = { 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; |
| 899 intptr_t two_len = sizeof(two) / sizeof(two[0]); | 899 intptr_t two_len = sizeof(two) / sizeof(two[0]); |
| 900 const String& str2 = String::Handle(String::New(two, two_len)); | 900 const String& str2 = String::Handle(String::FromUTF16(two, two_len)); |
| 901 EXPECT(str2.IsTwoByteString()); | 901 EXPECT(str2.IsTwoByteString()); |
| 902 EXPECT_EQ(two_len, str2.Length()); | 902 EXPECT_EQ(two_len, str2.Length()); |
| 903 | 903 |
| 904 // Concat | 904 // Concat |
| 905 | 905 |
| 906 const String& one_two_str = String::Handle(String::Concat(str1, str2)); | 906 const String& one_two_str = String::Handle(String::Concat(str1, str2)); |
| 907 EXPECT(one_two_str.IsTwoByteString()); | 907 EXPECT(one_two_str.IsTwoByteString()); |
| 908 const uint16_t one_two[] = { 0x05D0, 0x05D9, 0x05D9, 0x05DF, | 908 const uint16_t one_two[] = { 0x05D0, 0x05D9, 0x05D9, 0x05DF, |
| 909 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; | 909 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; |
| 910 intptr_t one_two_len = sizeof(one_two) / sizeof(one_two[0]); | 910 intptr_t one_two_len = sizeof(one_two) / sizeof(one_two[0]); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 970 | 970 |
| 971 // Concatenated emtpy and non-empty strings built from 4-byte elements. | 971 // Concatenated emtpy and non-empty strings built from 4-byte elements. |
| 972 { | 972 { |
| 973 const String& str1 = String::Handle(String::New("")); | 973 const String& str1 = String::Handle(String::New("")); |
| 974 EXPECT(str1.IsOneByteString()); | 974 EXPECT(str1.IsOneByteString()); |
| 975 EXPECT_EQ(0, str1.Length()); | 975 EXPECT_EQ(0, str1.Length()); |
| 976 | 976 |
| 977 int32_t four[] = { 0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1 }; | 977 int32_t four[] = { 0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1 }; |
| 978 intptr_t four_len = sizeof(four) / sizeof(four[0]); | 978 intptr_t four_len = sizeof(four) / sizeof(four[0]); |
| 979 intptr_t expected_len = (four_len * 2); | 979 intptr_t expected_len = (four_len * 2); |
| 980 const String& str2 = String::Handle(String::New(four, four_len)); | 980 const String& str2 = String::Handle(String::FromUTF32(four, four_len)); |
| 981 EXPECT(str2.IsTwoByteString()); | 981 EXPECT(str2.IsTwoByteString()); |
| 982 EXPECT_EQ(expected_len, str2.Length()); | 982 EXPECT_EQ(expected_len, str2.Length()); |
| 983 | 983 |
| 984 // Concat | 984 // Concat |
| 985 | 985 |
| 986 const String& str3 = String::Handle(String::Concat(str1, str2)); | 986 const String& str3 = String::Handle(String::Concat(str1, str2)); |
| 987 EXPECT_EQ(expected_len, str3.Length()); | 987 EXPECT_EQ(expected_len, str3.Length()); |
| 988 EXPECT(str3.Equals(str2)); | 988 EXPECT(str3.Equals(str2)); |
| 989 | 989 |
| 990 const String& str4 = String::Handle(String::Concat(str2, str1)); | 990 const String& str4 = String::Handle(String::Concat(str2, str1)); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1017 array3.SetAt(0, str2); | 1017 array3.SetAt(0, str2); |
| 1018 array3.SetAt(1, str1); | 1018 array3.SetAt(1, str1); |
| 1019 array3.SetAt(2, str2); | 1019 array3.SetAt(2, str2); |
| 1020 const String& str7 = String::Handle(String::ConcatAll(array3)); | 1020 const String& str7 = String::Handle(String::ConcatAll(array3)); |
| 1021 EXPECT(str7.IsTwoByteString()); | 1021 EXPECT(str7.IsTwoByteString()); |
| 1022 int32_t fourfour[] = { 0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1, | 1022 int32_t fourfour[] = { 0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1, |
| 1023 0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1 }; | 1023 0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1 }; |
| 1024 intptr_t fourfour_len = sizeof(fourfour) / sizeof(fourfour[0]); | 1024 intptr_t fourfour_len = sizeof(fourfour) / sizeof(fourfour[0]); |
| 1025 EXPECT_EQ((fourfour_len * 2), str7.Length()); | 1025 EXPECT_EQ((fourfour_len * 2), str7.Length()); |
| 1026 const String& fourfour_str = | 1026 const String& fourfour_str = |
| 1027 String::Handle(String::New(fourfour, fourfour_len)); | 1027 String::Handle(String::FromUTF32(fourfour, fourfour_len)); |
| 1028 EXPECT(str7.Equals(fourfour_str)); | 1028 EXPECT(str7.Equals(fourfour_str)); |
| 1029 } | 1029 } |
| 1030 | 1030 |
| 1031 // Concatenate non-empty strings built from 4-byte elements. | 1031 // Concatenate non-empty strings built from 4-byte elements. |
| 1032 { | 1032 { |
| 1033 const int32_t one[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF }; | 1033 const int32_t one[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF }; |
| 1034 intptr_t one_len = sizeof(one) / sizeof(one[0]); | 1034 intptr_t one_len = sizeof(one) / sizeof(one[0]); |
| 1035 const String& onestr = String::Handle(String::New(one, one_len)); | 1035 const String& onestr = String::Handle(String::FromUTF32(one, one_len)); |
| 1036 EXPECT(onestr.IsTwoByteString()); | 1036 EXPECT(onestr.IsTwoByteString()); |
| 1037 EXPECT_EQ((one_len *2), onestr.Length()); | 1037 EXPECT_EQ((one_len *2), onestr.Length()); |
| 1038 | 1038 |
| 1039 const int32_t two[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9 }; | 1039 const int32_t two[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9 }; |
| 1040 intptr_t two_len = sizeof(two) / sizeof(two[0]); | 1040 intptr_t two_len = sizeof(two) / sizeof(two[0]); |
| 1041 const String& twostr = String::Handle(String::New(two, two_len)); | 1041 const String& twostr = String::Handle(String::FromUTF32(two, two_len)); |
| 1042 EXPECT(twostr.IsTwoByteString()); | 1042 EXPECT(twostr.IsTwoByteString()); |
| 1043 EXPECT_EQ((two_len * 2), twostr.Length()); | 1043 EXPECT_EQ((two_len * 2), twostr.Length()); |
| 1044 | 1044 |
| 1045 // Concat | 1045 // Concat |
| 1046 | 1046 |
| 1047 const String& str1 = String::Handle(String::Concat(onestr, twostr)); | 1047 const String& str1 = String::Handle(String::Concat(onestr, twostr)); |
| 1048 EXPECT(str1.IsTwoByteString()); | 1048 EXPECT(str1.IsTwoByteString()); |
| 1049 const int32_t one_two[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF, | 1049 const int32_t one_two[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF, |
| 1050 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9 }; | 1050 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9 }; |
| 1051 intptr_t one_two_len = sizeof(one_two) / sizeof(one_two[0]); | 1051 intptr_t one_two_len = sizeof(one_two) / sizeof(one_two[0]); |
| 1052 EXPECT_EQ((one_two_len * 2), str1.Length()); | 1052 EXPECT_EQ((one_two_len * 2), str1.Length()); |
| 1053 const String& one_two_str = | 1053 const String& one_two_str = |
| 1054 String::Handle(String::New(one_two, one_two_len)); | 1054 String::Handle(String::FromUTF32(one_two, one_two_len)); |
| 1055 EXPECT(str1.Equals(one_two_str)); | 1055 EXPECT(str1.Equals(one_two_str)); |
| 1056 | 1056 |
| 1057 const String& str2 = String::Handle(String::Concat(twostr, onestr)); | 1057 const String& str2 = String::Handle(String::Concat(twostr, onestr)); |
| 1058 EXPECT(str2.IsTwoByteString()); | 1058 EXPECT(str2.IsTwoByteString()); |
| 1059 const int32_t two_one[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9, | 1059 const int32_t two_one[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9, |
| 1060 0x105D0, 0x105D9, 0x105D9, 0x105DF }; | 1060 0x105D0, 0x105D9, 0x105D9, 0x105DF }; |
| 1061 intptr_t two_one_len = sizeof(two_one) / sizeof(two_one[0]); | 1061 intptr_t two_one_len = sizeof(two_one) / sizeof(two_one[0]); |
| 1062 EXPECT_EQ((two_one_len * 2), str2.Length()); | 1062 EXPECT_EQ((two_one_len * 2), str2.Length()); |
| 1063 const String& two_one_str = | 1063 const String& two_one_str = |
| 1064 String::Handle(String::New(two_one, two_one_len)); | 1064 String::Handle(String::FromUTF32(two_one, two_one_len)); |
| 1065 EXPECT(str2.Equals(two_one_str)); | 1065 EXPECT(str2.Equals(two_one_str)); |
| 1066 | 1066 |
| 1067 // ConcatAll | 1067 // ConcatAll |
| 1068 | 1068 |
| 1069 const Array& array1 = Array::Handle(Array::New(2)); | 1069 const Array& array1 = Array::Handle(Array::New(2)); |
| 1070 EXPECT_EQ(2, array1.Length()); | 1070 EXPECT_EQ(2, array1.Length()); |
| 1071 array1.SetAt(0, onestr); | 1071 array1.SetAt(0, onestr); |
| 1072 array1.SetAt(1, twostr); | 1072 array1.SetAt(1, twostr); |
| 1073 const String& str3 = String::Handle(String::ConcatAll(array1)); | 1073 const String& str3 = String::Handle(String::ConcatAll(array1)); |
| 1074 EXPECT(str3.IsTwoByteString()); | 1074 EXPECT(str3.IsTwoByteString()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1091 array3.SetAt(2, onestr); | 1091 array3.SetAt(2, onestr); |
| 1092 const String& str5 = String::Handle(String::ConcatAll(array3)); | 1092 const String& str5 = String::Handle(String::ConcatAll(array3)); |
| 1093 EXPECT(str5.IsTwoByteString()); | 1093 EXPECT(str5.IsTwoByteString()); |
| 1094 const int32_t one_two_one[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF, | 1094 const int32_t one_two_one[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF, |
| 1095 0x105E6, 0x105D5, 0x105D5, 0x105D9, | 1095 0x105E6, 0x105D5, 0x105D5, 0x105D9, |
| 1096 0x105D9, | 1096 0x105D9, |
| 1097 0x105D0, 0x105D9, 0x105D9, 0x105DF }; | 1097 0x105D0, 0x105D9, 0x105D9, 0x105DF }; |
| 1098 intptr_t one_two_one_len = sizeof(one_two_one) / sizeof(one_two_one[0]); | 1098 intptr_t one_two_one_len = sizeof(one_two_one) / sizeof(one_two_one[0]); |
| 1099 EXPECT_EQ((one_two_one_len * 2), str5.Length()); | 1099 EXPECT_EQ((one_two_one_len * 2), str5.Length()); |
| 1100 const String& one_two_one_str = | 1100 const String& one_two_one_str = |
| 1101 String::Handle(String::New(one_two_one, one_two_one_len)); | 1101 String::Handle(String::FromUTF32(one_two_one, one_two_one_len)); |
| 1102 EXPECT(str5.Equals(one_two_one_str)); | 1102 EXPECT(str5.Equals(one_two_one_str)); |
| 1103 | 1103 |
| 1104 const Array& array4 = Array::Handle(Array::New(3)); | 1104 const Array& array4 = Array::Handle(Array::New(3)); |
| 1105 EXPECT_EQ(3, array4.Length()); | 1105 EXPECT_EQ(3, array4.Length()); |
| 1106 array4.SetAt(0, twostr); | 1106 array4.SetAt(0, twostr); |
| 1107 array4.SetAt(1, onestr); | 1107 array4.SetAt(1, onestr); |
| 1108 array4.SetAt(2, twostr); | 1108 array4.SetAt(2, twostr); |
| 1109 const String& str6 = String::Handle(String::ConcatAll(array4)); | 1109 const String& str6 = String::Handle(String::ConcatAll(array4)); |
| 1110 EXPECT(str6.IsTwoByteString()); | 1110 EXPECT(str6.IsTwoByteString()); |
| 1111 const int32_t two_one_two[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9, | 1111 const int32_t two_one_two[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9, |
| 1112 0x105D9, | 1112 0x105D9, |
| 1113 0x105D0, 0x105D9, 0x105D9, 0x105DF, | 1113 0x105D0, 0x105D9, 0x105D9, 0x105DF, |
| 1114 0x105E6, 0x105D5, 0x105D5, 0x105D9, | 1114 0x105E6, 0x105D5, 0x105D5, 0x105D9, |
| 1115 0x105D9 }; | 1115 0x105D9 }; |
| 1116 intptr_t two_one_two_len = sizeof(two_one_two) / sizeof(two_one_two[0]); | 1116 intptr_t two_one_two_len = sizeof(two_one_two) / sizeof(two_one_two[0]); |
| 1117 EXPECT_EQ((two_one_two_len * 2), str6.Length()); | 1117 EXPECT_EQ((two_one_two_len * 2), str6.Length()); |
| 1118 const String& two_one_two_str = | 1118 const String& two_one_two_str = |
| 1119 String::Handle(String::New(two_one_two, two_one_two_len)); | 1119 String::Handle(String::FromUTF32(two_one_two, two_one_two_len)); |
| 1120 EXPECT(str6.Equals(two_one_two_str)); | 1120 EXPECT(str6.Equals(two_one_two_str)); |
| 1121 } | 1121 } |
| 1122 | 1122 |
| 1123 // Concatenate 1-byte strings and 2-byte strings. | 1123 // Concatenate 1-byte strings and 2-byte strings. |
| 1124 { | 1124 { |
| 1125 const uint8_t one[] = { 'o', 'n', 'e', ' ', 'b', 'y', 't', 'e' }; | 1125 const uint8_t one[] = { 'o', 'n', 'e', ' ', 'b', 'y', 't', 'e' }; |
| 1126 intptr_t one_len = sizeof(one) / sizeof(one[0]); | 1126 intptr_t one_len = sizeof(one) / sizeof(one[0]); |
| 1127 const String& onestr = String::Handle(String::New(one, one_len)); | 1127 const String& onestr = String::Handle(String::FromLatin1(one, one_len)); |
| 1128 EXPECT(onestr.IsOneByteString()); | 1128 EXPECT(onestr.IsOneByteString()); |
| 1129 EXPECT_EQ(one_len, onestr.Length()); | 1129 EXPECT_EQ(one_len, onestr.Length()); |
| 1130 EXPECT(onestr.Equals(one, one_len)); | 1130 EXPECT(onestr.Equals(one, one_len)); |
| 1131 | 1131 |
| 1132 uint16_t two[] = { 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; | 1132 uint16_t two[] = { 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; |
| 1133 intptr_t two_len = sizeof(two) / sizeof(two[0]); | 1133 intptr_t two_len = sizeof(two) / sizeof(two[0]); |
| 1134 const String& twostr = String::Handle(String::New(two, two_len)); | 1134 const String& twostr = String::Handle(String::FromUTF16(two, two_len)); |
| 1135 EXPECT(twostr.IsTwoByteString()); | 1135 EXPECT(twostr.IsTwoByteString()); |
| 1136 EXPECT_EQ(two_len, twostr.Length()); | 1136 EXPECT_EQ(two_len, twostr.Length()); |
| 1137 EXPECT(twostr.Equals(two, two_len)); | 1137 EXPECT(twostr.Equals(two, two_len)); |
| 1138 | 1138 |
| 1139 // Concat | 1139 // Concat |
| 1140 | 1140 |
| 1141 const String& one_two_str = String::Handle(String::Concat(onestr, twostr)); | 1141 const String& one_two_str = String::Handle(String::Concat(onestr, twostr)); |
| 1142 EXPECT(one_two_str.IsTwoByteString()); | 1142 EXPECT(one_two_str.IsTwoByteString()); |
| 1143 uint16_t one_two[] = { 'o', 'n', 'e', ' ', 'b', 'y', 't', 'e', | 1143 uint16_t one_two[] = { 'o', 'n', 'e', ' ', 'b', 'y', 't', 'e', |
| 1144 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; | 1144 0x05E6, 0x05D5, 0x05D5, 0x05D9, 0x05D9 }; |
| (...skipping 2105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3250 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint()); | 3250 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint()); |
| 3251 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint()); | 3251 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint()); |
| 3252 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint()); | 3252 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint()); |
| 3253 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint()); | 3253 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint()); |
| 3254 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint()); | 3254 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint()); |
| 3255 } | 3255 } |
| 3256 | 3256 |
| 3257 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). | 3257 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
| 3258 | 3258 |
| 3259 } // namespace dart | 3259 } // namespace dart |
| OLD | NEW |