Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index 4125b3ce266f808a34672ca37d5495a4a21e24db..3a5049ec6d3f283565368034a5395f3f1e6cb7df 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -11492,6 +11492,53 @@ static void ExternalArrayTestHelper(v8::ExternalArrayType array_type, |
CHECK_EQ(true, result->BooleanValue()); |
} |
+ // Test crankshaft external array loads |
+ for (int i = 0; i < kElementCount; i++) { |
+ array->set(i, static_cast<ElementType>(i)); |
+ } |
+ result = CompileRun("function ee_load_test_func(sum) {" |
+ " for (var i=0;i<40;++i)" |
+ " sum += ext_array[i];" |
+ " return sum;" |
+ "}" |
+ "sum=0;" |
+ "for (var i=0;i<10000;++i) {" |
+ " sum=ee_load_test_func(sum);" |
+ "}" |
+ "sum;"); |
+ CHECK_EQ(7800000, result->Int32Value()); |
+ |
+ // Test crankshaft external array stores |
+ result = CompileRun("function ee_store_test_func(sum) {" |
+ " for (var i=0;i<40;++i)" |
+ " sum += ext_array[i] = i;" |
+ " return sum;" |
+ "}" |
+ "sum=0;" |
+ "for (var i=0;i<10000;++i) {" |
+ " sum=ee_store_test_func(sum);" |
+ "}" |
+ "sum;"); |
+ CHECK_EQ(7800000, result->Int32Value()); |
+ |
+ // Test edge cases for crankshaft code. |
+ array->set(0, static_cast<ElementType>(0xFFFFFFFF)); |
+ result = CompileRun("function ee_limit_test_func(i) {" |
+ " return ext_array[i];" |
+ " return sum;" |
+ "}" |
+ "sum=0;" |
+ "for (var i=0;i<1000000;++i) {" |
+ " sum=ee_limit_test_func(0);" |
+ "}" |
+ "sum;"); |
+ if (array_type == v8::kExternalFloatArray) { |
+ CHECK_EQ(0, result->Int32Value()); |
+ } else { |
+ CHECK_EQ(static_cast<int>(static_cast<ElementType>(0xFFFFFFFF)), |
+ result->Int32Value()); |
+ } |
+ |
result = CompileRun("ext_array[3] = 33;" |
"delete ext_array[3];" |
"ext_array[3];"); |