Chromium Code Reviews| Index: test/cctest/test-api.cc |
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
| index 8fca65cedc55479ef4a97711727ad7b44bf4c700..77c0803b4072cdfcc49ec7ddfdab198e490a0eb0 100644 |
| --- a/test/cctest/test-api.cc |
| +++ b/test/cctest/test-api.cc |
| @@ -2315,7 +2315,6 @@ THREADED_TEST(ArrayBuffer) { |
| result = CompileRun("u8_b[0] + u8_b[1]"); |
| CHECK_EQ(0xDD, result->Int32Value()); |
| - |
| delete[] my_data; |
| } |
| @@ -12295,10 +12294,11 @@ THREADED_TEST(ExternalAllocatedMemory) { |
| CHECK(!env.IsEmpty()); |
| const intptr_t kSize = 1024*1024; |
| v8::Isolate* isolate = env->GetIsolate(); |
| - CHECK_EQ(cast(isolate->AdjustAmountOfExternalAllocatedMemory(kSize)), |
| - cast(kSize)); |
| - CHECK_EQ(cast(isolate->AdjustAmountOfExternalAllocatedMemory(-kSize)), |
| - cast(0)); |
| + int64_t baseline = cast(isolate->AdjustAmountOfExternalAllocatedMemory(0)); |
| + CHECK_EQ(baseline + cast(kSize), |
| + cast(isolate->AdjustAmountOfExternalAllocatedMemory(kSize))); |
|
rossberg
2013/04/29 10:50:27
Nit: indentation
Dmitry Lomov (no reviews)
2013/04/29 11:08:53
Done.
|
| + CHECK_EQ(baseline, |
| + cast(isolate->AdjustAmountOfExternalAllocatedMemory(-kSize))); |
| } |
| @@ -14435,39 +14435,13 @@ static int ExternalArrayElementSize(v8::ExternalArrayType array_type) { |
| template <class ExternalArrayClass, class ElementType> |
| -static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, |
| - int64_t low, |
| - int64_t high) { |
| - LocalContext context; |
| - v8::HandleScope scope(context->GetIsolate()); |
| - const int kElementCount = 40; |
| - int element_size = ExternalArrayElementSize(array_type); |
| - ElementType* array_data = |
| - static_cast<ElementType*>(malloc(kElementCount * element_size)); |
| - i::Handle<ExternalArrayClass> array = |
| - i::Handle<ExternalArrayClass>::cast( |
| - FACTORY->NewExternalArray(kElementCount, array_type, array_data)); |
| - // Force GC to trigger verification. |
| - HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| - for (int i = 0; i < kElementCount; i++) { |
| - array->set(i, static_cast<ElementType>(i)); |
| - } |
| - // Force GC to trigger verification. |
| - HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| - for (int i = 0; i < kElementCount; i++) { |
| - CHECK_EQ(static_cast<int64_t>(i), |
| - static_cast<int64_t>(array->get_scalar(i))); |
| - CHECK_EQ(static_cast<int64_t>(i), static_cast<int64_t>(array_data[i])); |
| - } |
| - |
| - v8::Handle<v8::Object> obj = v8::Object::New(); |
| +static void ObjectWithExternalArrayTestHelper( |
| + Handle<Context> context, |
| + v8::Handle<Object> obj, |
| + int elementCount, |
|
rossberg
2013/04/29 10:50:27
Nit: element_count
Dmitry Lomov (no reviews)
2013/04/29 11:08:53
Done.
|
| + v8::ExternalArrayType array_type, |
| + int64_t low, int64_t high) { |
| i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj); |
| - // Set the elements to be the external array. |
| - obj->SetIndexedPropertiesToExternalArrayData(array_data, |
| - array_type, |
| - kElementCount); |
| - CHECK_EQ( |
| - 1, static_cast<int>(jsobj->GetElement(1)->ToObjectChecked()->Number())); |
| obj->Set(v8_str("field"), v8::Int32::New(1503)); |
| context->Global()->Set(v8_str("ext_array"), obj); |
| v8::Handle<v8::Value> result = CompileRun("ext_array.field"); |
| @@ -14584,7 +14558,7 @@ static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, |
| " caught_exception = true;" |
| "}" |
| "caught_exception;", |
| - kElementCount); |
| + elementCount); |
| result = CompileRun(test_buf.start()); |
| CHECK_EQ(false, result->BooleanValue()); |
| @@ -14597,7 +14571,7 @@ static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, |
| " caught_exception = true;" |
| "}" |
| "caught_exception;", |
| - kElementCount); |
| + elementCount); |
| result = CompileRun(test_buf.start()); |
| CHECK_EQ(false, result->BooleanValue()); |
| @@ -14698,9 +14672,12 @@ static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, |
| CHECK_EQ(true, result->BooleanValue()); |
| } |
| - for (int i = 0; i < kElementCount; i++) { |
| + i::Handle<ExternalArrayClass> array( |
| + ExternalArrayClass::cast(jsobj->elements())); |
| + for (int i = 0; i < elementCount; i++) { |
| array->set(i, static_cast<ElementType>(i)); |
| } |
| + |
| // Test complex assignments |
| result = CompileRun("function ee_op_test_complex_func(sum) {" |
| " for (var i = 0; i < 40; ++i) {" |
| @@ -14757,6 +14734,48 @@ static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, |
| result = CompileRun("ext_array[1] = 23;"); |
| CHECK_EQ(23, result->Int32Value()); |
| +} |
| + |
| + |
| +template <class ExternalArrayClass, class ElementType> |
| +static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, |
| + int64_t low, |
| + int64_t high) { |
| + LocalContext context; |
| + v8::HandleScope scope(context->GetIsolate()); |
| + const int kElementCount = 40; |
| + int element_size = ExternalArrayElementSize(array_type); |
| + ElementType* array_data = |
| + static_cast<ElementType*>(malloc(kElementCount * element_size)); |
| + i::Handle<ExternalArrayClass> array = |
| + i::Handle<ExternalArrayClass>::cast( |
| + FACTORY->NewExternalArray(kElementCount, array_type, array_data)); |
| + // Force GC to trigger verification. |
| + HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| + for (int i = 0; i < kElementCount; i++) { |
| + array->set(i, static_cast<ElementType>(i)); |
| + } |
| + // Force GC to trigger verification. |
| + HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| + for (int i = 0; i < kElementCount; i++) { |
| + CHECK_EQ(static_cast<int64_t>(i), |
| + static_cast<int64_t>(array->get_scalar(i))); |
| + CHECK_EQ(static_cast<int64_t>(i), static_cast<int64_t>(array_data[i])); |
| + } |
| + |
| + v8::Handle<v8::Object> obj = v8::Object::New(); |
| + i::Handle<i::JSObject> jsobj = v8::Utils::OpenHandle(*obj); |
| + // Set the elements to be the external array. |
| + obj->SetIndexedPropertiesToExternalArrayData(array_data, |
| + array_type, |
| + kElementCount); |
| + CHECK_EQ( |
| + 1, static_cast<int>(jsobj->GetElement(1)->ToObjectChecked()->Number())); |
| + |
| + ObjectWithExternalArrayTestHelper<ExternalArrayClass, ElementType>( |
| + context.local(), obj, kElementCount, array_type, low, high); |
| + |
| + v8::Handle<v8::Value> result; |
| // Test more complex manipulations which cause eax to contain values |
| // that won't be completely overwritten by loads from the arrays. |
| @@ -15074,6 +15093,87 @@ TEST(ExternalArrayLimits) { |
| } |
| +template <typename ElementType, class TypedArray, |
|
rossberg
2013/04/29 10:50:27
Nit: use either 'typename' or 'class' consistently
Dmitry Lomov (no reviews)
2013/04/29 11:08:53
Done.
|
| + class ExternalArrayClass> |
| +void TypedArrayTestHelper(v8::ExternalArrayType array_type, |
| + int64_t low, int64_t high) { |
| + const int kElementCount = 50; |
| + i::FLAG_harmony_typed_arrays = true; |
| + |
| + LocalContext env; |
| + v8::Isolate* isolate = env->GetIsolate(); |
| + v8::HandleScope handle_scope(isolate); |
| + |
| + Local<v8::ArrayBuffer> ab = |
| + v8::ArrayBuffer::New((kElementCount+2)*sizeof(ElementType)); |
| + Local<TypedArray> ta = |
| + TypedArray::New(ab, 2*sizeof(ElementType), kElementCount); |
| + CHECK_EQ(kElementCount, static_cast<int>(ta->Length())); |
| + CHECK_EQ(2*sizeof(ElementType), static_cast<int>(ta->ByteOffset())); |
| + CHECK_EQ(kElementCount*sizeof(ElementType), |
| + static_cast<int>(ta->ByteLength())); |
| + CHECK_EQ(ab, ta->Buffer()); |
| + |
| + ElementType* data = static_cast<ElementType*>(ab->Data()) + 2; |
| + for (int i = 0; i < kElementCount; i++) { |
| + data[i] = static_cast<ElementType>(i); |
| + } |
| + |
| + ObjectWithExternalArrayTestHelper<ExternalArrayClass, ElementType>( |
| + env.local(), ta, kElementCount, array_type, low, high); |
| +} |
| + |
| + |
| +THREADED_TEST(Uint8Array) { |
| + TypedArrayTestHelper<uint8_t, v8::Uint8Array, i::ExternalUnsignedByteArray>( |
| + v8::kExternalUnsignedByteArray, 0, 0xFF); |
| +} |
| + |
| + |
| +THREADED_TEST(Int8Array) { |
| + TypedArrayTestHelper<int8_t, v8::Int8Array, i::ExternalByteArray>( |
| + v8::kExternalByteArray, -0x80, 0x7F); |
| +} |
| + |
| + |
| +THREADED_TEST(Uint16Array) { |
| + TypedArrayTestHelper<uint16_t, |
| + v8::Uint16Array, |
| + i::ExternalUnsignedShortArray>( |
| + v8::kExternalUnsignedShortArray, 0, 0xFFFF); |
| +} |
| + |
| + |
| +THREADED_TEST(Int16Array) { |
| + TypedArrayTestHelper<int16_t, v8::Int16Array, i::ExternalShortArray>( |
| + v8::kExternalShortArray, -0x8000, 0x7FFF); |
| +} |
| + |
| + |
| +THREADED_TEST(Uint32Array) { |
| + TypedArrayTestHelper<uint32_t, v8::Uint32Array, i::ExternalUnsignedIntArray>( |
| + v8::kExternalUnsignedIntArray, 0, UINT_MAX); |
| +} |
| + |
| + |
| +THREADED_TEST(Int32Array) { |
| + TypedArrayTestHelper<int32_t, v8::Int32Array, i::ExternalIntArray>( |
| + v8::kExternalIntArray, INT_MIN, INT_MAX); |
| +} |
| + |
| + |
| +THREADED_TEST(Float32Array) { |
| + TypedArrayTestHelper<float, v8::Float32Array, i::ExternalFloatArray>( |
| + v8::kExternalFloatArray, -500, 500); |
| +} |
| + |
| + |
| +THREADED_TEST(Float64Array) { |
| + TypedArrayTestHelper<double, v8::Float64Array, i::ExternalDoubleArray>( |
| + v8::kExternalDoubleArray, -500, 500); |
| +} |
| + |
| + |
| THREADED_TEST(ScriptContextDependence) { |
| LocalContext c1; |
| v8::HandleScope scope(c1->GetIsolate()); |