| Index: test/cctest/test-api.cc
|
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
|
| index a59dd16f7c47548a61a9ef88a565d8f0e452a751..10f8af1d4cf72ee2ab618448eb4e64fbd301cc8d 100755
|
| --- a/test/cctest/test-api.cc
|
| +++ b/test/cctest/test-api.cc
|
| @@ -17033,8 +17033,12 @@ TEST(ContainsOnlyOneByte) {
|
| v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| v8::HandleScope scope(isolate);
|
| // Make a buffer long enough that it won't automatically be converted.
|
| - const int length = 200;
|
| - i::SmartArrayPointer<uint16_t> string_contents(new uint16_t[length]);
|
| + const int length = 512;
|
| + // Ensure word aligned assignment.
|
| + const int aligned_length = length*sizeof(uintptr_t)/sizeof(uint16_t);
|
| + i::SmartArrayPointer<uintptr_t>
|
| + aligned_contents(new uintptr_t[aligned_length]);
|
| + uint16_t* string_contents = reinterpret_cast<uint16_t*>(*aligned_contents);
|
| // Set to contain only one byte.
|
| for (int i = 0; i < length-1; i++) {
|
| string_contents[i] = 0x41;
|
| @@ -17042,10 +17046,10 @@ TEST(ContainsOnlyOneByte) {
|
| string_contents[length-1] = 0;
|
| // Simple case.
|
| Handle<String> string;
|
| - string = String::NewExternal(new TestResource(*string_contents));
|
| + string = String::NewExternal(new TestResource(string_contents));
|
| CHECK(!string->IsOneByte() && string->ContainsOnlyOneByte());
|
| // Counter example.
|
| - string = String::NewFromTwoByte(isolate, *string_contents);
|
| + string = String::NewFromTwoByte(isolate, string_contents);
|
| CHECK(string->IsOneByte() && string->ContainsOnlyOneByte());
|
| // Test left right and balanced cons strings.
|
| Handle<String> base = String::NewFromUtf8(isolate, "a");
|
| @@ -17059,7 +17063,7 @@ TEST(ContainsOnlyOneByte) {
|
| balanced = String::Concat(balanced, right);
|
| Handle<String> cons_strings[] = {left, balanced, right};
|
| Handle<String> two_byte =
|
| - String::NewExternal(new TestResource(*string_contents));
|
| + String::NewExternal(new TestResource(string_contents));
|
| for (size_t i = 0; i < ARRAY_SIZE(cons_strings); i++) {
|
| // Base assumptions.
|
| string = cons_strings[i];
|
| @@ -17070,6 +17074,24 @@ TEST(ContainsOnlyOneByte) {
|
| string = String::Concat(cons_strings[i], two_byte);
|
| CHECK(!string->IsOneByte() && string->ContainsOnlyOneByte());
|
| }
|
| + // Set bits in different positions
|
| + // for strings of different lengths and alignments.
|
| + for (int alignment = 0; alignment < 7; alignment++) {
|
| + for (int size = 2; alignment + size < length; size *= 2) {
|
| + int zero_offset = size + alignment;
|
| + string_contents[zero_offset] = 0;
|
| + for (int i = 0; i < size; i++) {
|
| + int shift = 8 + (i % 7);
|
| + string_contents[alignment + i] = 1 << shift;
|
| + string =
|
| + String::NewExternal(new TestResource(string_contents + alignment));
|
| + CHECK_EQ(size, string->Length());
|
| + CHECK(!string->ContainsOnlyOneByte());
|
| + string_contents[alignment + i] = 0x41;
|
| + }
|
| + string_contents[zero_offset] = 0x41;
|
| + }
|
| + }
|
| }
|
|
|
|
|
|
|