Index: test/mjsunit/external-array.js |
diff --git a/test/mjsunit/external-array.js b/test/mjsunit/external-array.js |
index f03f5799fa4d6c2ccd18a1fa6dec62b48b6d8a21..3847d595fcc4d3a98bdf745eead0d393877d95de 100644 |
--- a/test/mjsunit/external-array.js |
+++ b/test/mjsunit/external-array.js |
@@ -61,7 +61,7 @@ function get(a, index) { |
function set(a, index, value) { |
a[index] = value; |
} |
- |
+function temp() { |
var array = new Float64Array(2); |
for (var i = 0; i < 5; i++) { |
set(array, 0, 2.5); |
@@ -79,11 +79,17 @@ for (var i = 0; i < 5; i++) { |
%OptimizeFunctionOnNextCall(get); |
assertEquals(2.5, get(array, 0)); |
assertEquals(3.5, get(array, 1)); |
+} |
// Test loads and stores. |
-types = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, |
+types = [Array, Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, |
Uint32Array, PixelArray, Float32Array, Float64Array]; |
+test_result_nan = [NaN, 0, 0, 0, 0, 0, 0, 0, NaN, NaN]; |
+test_result_low_int = [-1, -1, 255, -1, 65535, -1, 0xFFFFFFFF, 0, -1, -1]; |
+test_result_middle = [253.75, -3, 253, 253, 253, 253, 253, 254, 253.75, 253.75]; |
+test_result_high_int = [256, 0, 0, 256, 256, 256, 256, 255, 256, 256]; |
+ |
const kElementCount = 40; |
function test_load(array, sum) { |
@@ -114,37 +120,77 @@ function test_store_const_key(array, sum) { |
return sum; |
} |
-function run_test(test_func, array, expected_sum_per_run) { |
+ |
+function test_store_middle_double(array, sum) { |
+ array[0] = 253.75; |
+ return array[0]; |
+} |
+ |
+ |
+function test_store_high_double(array, sum) { |
+ array[0] = 256.25; |
+ return array[0]; |
+} |
+ |
+function test_store_high_double(array, sum) { |
+ array[0] = 256.25; |
+ return array[0]; |
+} |
+ |
+function test_store_low_int(array, sum) { |
+ array[0] = -1; |
+ return array[0]; |
+} |
+ |
+function test_store_high_int(array, sum) { |
+ array[0] = 256; |
+ return array[0]; |
+} |
+ |
+function test_store_nan(array, sum) { |
+ array[0] = NaN; |
+ return array[0]; |
+} |
+ |
+const kRuns = 10; |
+ |
+function run_test(test_func, array, expected_result) { |
for (var i = 0; i < 5; i++) test_func(array, 0); |
%OptimizeFunctionOnNextCall(test_func); |
- const kRuns = 10; |
var sum = 0; |
for (var i = 0; i < kRuns; i++) { |
sum = test_func(array, sum); |
} |
- assertEquals(sum, expected_sum_per_run * kRuns); |
+ assertEquals(expected_result, sum); |
%DeoptimizeFunction(test_func); |
gc(); // Makes V8 forget about type information for test_func. |
} |
for (var t = 0; t < types.length; t++) { |
var type = types[t]; |
+ print ("type = " + t); |
var a = new type(kElementCount); |
for (var i = 0; i < kElementCount; i++) { |
a[i] = i; |
} |
- |
+ |
// Run test functions defined above. |
- run_test(test_load, a, 780); |
- run_test(test_load_const_key, a, 3); |
- run_test(test_store, a, 820); |
- run_test(test_store_const_key, a, 6); |
- |
+ run_test(test_load, a, 780 * kRuns); |
+ run_test(test_load_const_key, a, 3 * kRuns); |
+ run_test(test_store, a, 820 * kRuns); |
+ run_test(test_store_const_key, a, 6 * kRuns); |
+ run_test(test_store_low_int, a, test_result_low_int[t]); |
+ run_test(test_store_high_int, a, test_result_high_int[t]); |
+ run_test(test_store_nan, a, test_result_nan[t]); |
+ run_test(test_store_middle_double, a, test_result_middle[t]); |
+ |
// Test the correct behavior of the |length| property (which is read-only). |
- assertEquals(kElementCount, a.length); |
- a.length = 2; |
- assertEquals(kElementCount, a.length); |
- assertTrue(delete a.length); |
- a.length = 2 |
- assertEquals(2, a.length); |
+ if (t != 0) { |
+ assertEquals(kElementCount, a.length); |
+ a.length = 2; |
+ assertEquals(kElementCount, a.length); |
+ assertTrue(delete a.length); |
+ a.length = 2; |
+ assertEquals(2, a.length); |
+ } |
} |