Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Unified Diff: test/mjsunit/unbox-double-arrays.js

Issue 7400020: Implement setting the length of FixedDoubleArrays. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: fix nits Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/objects.cc ('K') | « src/objects-inl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/unbox-double-arrays.js
diff --git a/test/mjsunit/unbox-double-arrays.js b/test/mjsunit/unbox-double-arrays.js
index a603e00c05ddba73638cca4153036710f9215006..64f1cdc8abe1b70a19483b46ea9b1575e4f16196 100644
--- a/test/mjsunit/unbox-double-arrays.js
+++ b/test/mjsunit/unbox-double-arrays.js
@@ -28,7 +28,7 @@
// Test dictionary -> double elements -> dictionary elements round trip
// Flags: --allow-natives-syntax --unbox-double-arrays --expose-gc
-var large_array_size = 500000;
+var large_array_size = 100000;
var approx_dict_to_elements_threshold = 69000;
var name = 0;
@@ -42,6 +42,7 @@ function expected_array_value(i) {
}
function force_to_fast_double_array(a) {
+ a[large_array_size - 1] = 1;
for (var i= 0; i < approx_dict_to_elements_threshold; ++i ) {
a[i] = expected_array_value(i);
}
@@ -52,8 +53,14 @@ function flush_compiled_code() {
gc();
}
+function make_object_like_array(size) {
+ obj = new Object();
+ obj.length = size;
+ return obj;
+}
+
function testOneArrayType(allocator) {
- var large_array = new allocator(500000);
+ var large_array = new allocator(large_array_size);
force_to_fast_double_array(large_array);
for (var i= 0; i < approx_dict_to_elements_threshold; i += 501 ) {
@@ -67,7 +74,7 @@ function testOneArrayType(allocator) {
assertEquals(value_5, a[5]);
assertEquals(value_6, a[6]);
assertEquals(value_7, a[7]);
- assertEquals(undefined, a[large_array_size-1]);
+ assertEquals(undefined, a[large_array_size-2]);
assertEquals(undefined, a[-1]);
assertEquals(large_array_size, a.length);
assertTrue(%HasFastDoubleElements(a));
@@ -78,7 +85,7 @@ function testOneArrayType(allocator) {
assertEquals(value_5, a[5]);
assertEquals(value_6, a[6]);
assertEquals(value_7, a[7]);
- assertEquals(undefined, a[large_array_size-1]);
+ assertEquals(undefined, a[large_array_size-2]);
assertEquals(undefined, a[-1]);
assertEquals(large_array_size, a.length);
assertTrue(%HasFastDoubleElements(a));
@@ -89,7 +96,7 @@ function testOneArrayType(allocator) {
assertEquals(value_5, a[5]);
assertEquals(value_6, a[6]);
assertEquals(value_7, a[7]);
- assertEquals(undefined, a[large_array_size-1]);
+ assertEquals(undefined, a[large_array_size-2]);
assertEquals(undefined, a[-1]);
assertEquals(large_array_size, a.length);
assertTrue(%HasFastDoubleElements(a));
@@ -100,7 +107,7 @@ function testOneArrayType(allocator) {
assertEquals(value_5, a[5]);
assertEquals(value_6, a[6]);
assertEquals(value_7, a[7]);
- assertEquals(undefined, a[large_array_size-1]);
+ assertEquals(undefined, a[large_array_size-2]);
assertEquals(undefined, a[-1]);
assertEquals(large_array_size, a.length);
assertTrue(%HasFastDoubleElements(a));
@@ -111,7 +118,7 @@ function testOneArrayType(allocator) {
assertEquals(value_5, a[5]);
assertEquals(value_6, a[6]);
assertEquals(value_7, a[7]);
- assertEquals(undefined, a[large_array_size-1]);
+ assertEquals(undefined, a[large_array_size-2]);
assertEquals(undefined, a[-1]);
assertEquals(large_array_size, a.length);
assertTrue(%HasFastDoubleElements(a));
@@ -122,7 +129,7 @@ function testOneArrayType(allocator) {
assertEquals(value_5, a[5]);
assertEquals(value_6, a[6]);
assertEquals(value_7, a[7]);
- assertEquals(undefined, a[large_array_size-1]);
+ assertEquals(undefined, a[large_array_size-2]);
assertEquals(undefined, a[-1]);
assertEquals(large_array_size, a.length);
assertTrue(%HasFastDoubleElements(a));
@@ -317,39 +324,80 @@ function testOneArrayType(allocator) {
-Infinity,
expected_array_value(7));
+ // Test apply
assertTrue(%GetOptimizationStatus(test_various_stores) != 2);
-
- // Make sure that we haven't converted from fast double.
- assertTrue(%HasFastDoubleElements(large_array));
- // Cause the array to grow beyond it's JSArray length. This will double the
- // size of the capacity and force the array into "slow" dictionary case.
- large_array[large_array_size+1] = 50;
- assertTrue(%HasDictionaryElements(large_array));
- assertEquals(50, large_array[large_array_size+1]);
- assertEquals(large_array_size+2, large_array.length);
- assertEquals(Infinity, large_array[5]);
- assertEquals(undefined, large_array[large_array_size-1]);
- assertEquals(undefined, large_array[-1]);
- assertEquals(large_array_size+2, large_array.length);
-
- // Test dictionary -> double elements -> fast elements.
- var large_array2 = new allocator(large_array_size);
- force_to_fast_double_array(large_array2);
- delete large_array2[5];
-
- // Convert back to fast elements and make sure the contents of the array are
- // unchanged.
- large_array2[25] = new Object();
- assertTrue(%HasFastElements(large_array2));
- for (var i= 0; i < approx_dict_to_elements_threshold; i += 500 ) {
- if (i != 25 && i != 5) {
- assertEquals(expected_array_value(i), large_array2[i]);
- }
- }
- assertEquals(undefined, large_array2[5])
- assertEquals(undefined, large_array2[large_array_size-1])
- assertEquals(undefined, large_array2[-1])
- assertEquals(large_array_size, large_array2.length);
}
+testOneArrayType(make_object_like_array);
testOneArrayType(Array);
+
+var large_array = new Array(large_array_size);
+force_to_fast_double_array(large_array);
+assertTrue(%HasFastDoubleElements(large_array));
+
+// Cause the array to grow beyond it's JSArray length. This will double the
+// size of the capacity and force the array into "slow" dictionary case.
+large_array[5] = Infinity;
+large_array[large_array_size+10001] = 50;
+assertTrue(%HasDictionaryElements(large_array));
+assertEquals(50, large_array[large_array_size+10001]);
+assertEquals(large_array_size+10002, large_array.length);
+assertEquals(Infinity, large_array[5]);
+assertEquals(undefined, large_array[large_array_size-2]);
+assertEquals(undefined, large_array[-1]);
+assertEquals(large_array_size+10002, large_array.length);
+
+// Test dictionary -> double elements -> fast elements.
+var large_array2 = new Array(large_array_size);
+force_to_fast_double_array(large_array2);
+delete large_array2[5];
+
+// Convert back to fast elements and make sure the contents of the array are
+// unchanged.
+large_array2[25] = new Object();
+assertTrue(%HasFastElements(large_array2));
+for (var i= 0; i < approx_dict_to_elements_threshold; i += 500 ) {
+ if (i != 25 && i != 5) {
+ assertEquals(expected_array_value(i), large_array2[i]);
+ }
+}
+assertEquals(undefined, large_array2[5]);
+assertEquals(undefined, large_array2[large_array_size-2]);
+assertEquals(undefined, large_array2[-1]);
+assertEquals(large_array_size, large_array2.length);
+
+// Make sure it's possible to change the array's length and that array is still
+// intact after the resize.
+var large_array3 = new Array(large_array_size);
+force_to_fast_double_array(large_array3);
+large_array3.length = 60000;
+assertEquals(60000, large_array3.length);
+assertEquals(undefined, large_array3[60000]);
+assertTrue(%HasFastDoubleElements(large_array3));
+assertEquals(expected_array_value(5), large_array3[5]);
+assertEquals(expected_array_value(6), large_array3[6]);
+assertEquals(expected_array_value(7), large_array3[7]);
Mads Ager (chromium) 2011/07/19 09:23:06 Test the element at "length - 1"?
danno 2011/07/19 15:47:19 Done.
+assertEquals(undefined, large_array3[large_array_size-2]);
+assertEquals(undefined, large_array3[-1]);
+
+large_array3.length = 25;
+assertEquals(25, large_array3.length);
+assertTrue(%HasFastDoubleElements(large_array3));
+assertEquals(undefined, large_array3[25]);
+assertEquals(expected_array_value(5), large_array3[5]);
+assertEquals(expected_array_value(6), large_array3[6]);
+assertEquals(expected_array_value(7), large_array3[7]);
+assertEquals(undefined, large_array3[large_array_size-2]);
+assertEquals(undefined, large_array3[-1]);
+
+large_array3.length = 100;
+assertEquals(100, large_array3.length);
+large_array3[95] = 95;
+assertTrue(%HasFastDoubleElements(large_array3));
+assertEquals(undefined, large_array3[100]);
+assertEquals(95, large_array3[95]);
+assertEquals(expected_array_value(5), large_array3[5]);
+assertEquals(expected_array_value(6), large_array3[6]);
+assertEquals(expected_array_value(7), large_array3[7]);
+assertEquals(undefined, large_array3[large_array_size-2]);
+assertEquals(undefined, large_array3[-1]);
« src/objects.cc ('K') | « src/objects-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698