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

Side by Side Diff: test/mjsunit/array-unshift.js

Issue 666883009: Change SmartMove no-op behavior to match SimpleMove (and ES6 spec) (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/array.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 19 matching lines...) Expand all
30 (function() { 30 (function() {
31 var array = new Array(10); 31 var array = new Array(10);
32 assertEquals(13, array.unshift('1st', '2ns', '3rd')); 32 assertEquals(13, array.unshift('1st', '2ns', '3rd'));
33 assertTrue(0 in array); 33 assertTrue(0 in array);
34 assertTrue(1 in array); 34 assertTrue(1 in array);
35 assertTrue(2 in array); 35 assertTrue(2 in array);
36 assertFalse(3 in array); 36 assertFalse(3 in array);
37 })(); 37 })();
38 38
39 39
40 // Check that unshift with no args has a side-effect of 40 // Check that unshift with no args has no side-effects.
41 // filling the holes with elements from the prototype
42 // (if present, of course)
43 (function() { 41 (function() {
44 var len = 3; 42 var len = 3;
45 var array = new Array(len); 43 var array = new Array(len);
46 44
47 var at0 = '@0'; 45 var at0 = '@0';
48 var at2 = '@2'; 46 var at2 = '@2';
49 47
50 Array.prototype[0] = at0; 48 Array.prototype[0] = at0;
51 Array.prototype[2] = at2; 49 Array.prototype[2] = at2;
52 50
53 // array owns nothing... 51 // array owns nothing...
54 assertFalse(array.hasOwnProperty(0)); 52 assertFalse(array.hasOwnProperty(0));
55 assertFalse(array.hasOwnProperty(1)); 53 assertFalse(array.hasOwnProperty(1));
56 assertFalse(array.hasOwnProperty(2)); 54 assertFalse(array.hasOwnProperty(2));
57 55
58 // ... but sees values from Array.prototype 56 // ... but sees values from Array.prototype
59 assertEquals(array[0], at0); 57 assertEquals(array[0], at0);
60 assertEquals(array[1], undefined); 58 assertEquals(array[1], undefined);
61 assertEquals(array[2], at2); 59 assertEquals(array[2], at2);
62 60
63 assertEquals(len, array.unshift()); 61 assertEquals(len, array.unshift());
64 62
65 assertTrue(delete Array.prototype[0]); 63 assertTrue(delete Array.prototype[0]);
66 assertTrue(delete Array.prototype[2]); 64 assertTrue(delete Array.prototype[2]);
67 65
68 // unshift makes array own 0 and 2... 66 // array still owns nothing...
69 assertTrue(array.hasOwnProperty(0)); 67 assertFalse(array.hasOwnProperty(0));
Michael Starzinger 2014/10/22 08:45:50 I am not convinced that this is actually spec-comp
adamk 2014/10/22 17:15:35 This appears to be a difference between ES5 and ES
70 assertFalse(array.hasOwnProperty(1)); 68 assertFalse(array.hasOwnProperty(1));
71 assertTrue(array.hasOwnProperty(2)); 69 assertFalse(array.hasOwnProperty(2));
72 70
73 // ... so they are not affected be delete. 71 // ... so they are not affected be delete.
74 assertEquals(array[0], at0); 72 assertEquals(array[0], undefined);
75 assertEquals(array[1], undefined); 73 assertEquals(array[1], undefined);
76 assertEquals(array[2], at2); 74 assertEquals(array[2], undefined);
77 })(); 75 })();
78 76
79 77
80 // Now check the case with array of holes and some elements on prototype. 78 // Now check the case with array of holes and some elements on prototype.
81 (function() { 79 (function() {
82 var len = 9; 80 var len = 9;
83 var array = new Array(len); 81 var array = new Array(len);
84 Array.prototype[3] = "@3"; 82 Array.prototype[3] = "@3";
85 Array.prototype[7] = "@7"; 83 Array.prototype[7] = "@7";
86 84
(...skipping 21 matching lines...) Expand all
108 assertFalse(array.hasOwnProperty(3)); 106 assertFalse(array.hasOwnProperty(3));
109 107
110 assertEquals(array[7], Array.prototype[7]); 108 assertEquals(array[7], Array.prototype[7]);
111 assertFalse(array.hasOwnProperty(7)); 109 assertFalse(array.hasOwnProperty(7));
112 110
113 assertTrue(delete Array.prototype[3]); 111 assertTrue(delete Array.prototype[3]);
114 assertTrue(delete Array.prototype[5]); 112 assertTrue(delete Array.prototype[5]);
115 assertTrue(delete Array.prototype[7]); 113 assertTrue(delete Array.prototype[7]);
116 })(); 114 })();
117 115
118 // Check that unshift with no args has a side-effect of 116 // Check that unshift with no args has no side-effects.
119 // filling the holes with elements from the prototype
120 // (if present, of course)
121 (function() { 117 (function() {
122 var len = 3; 118 var len = 3;
123 var array = new Array(len); 119 var array = new Array(len);
124 120
125 var at0 = '@0'; 121 var at0 = '@0';
126 var at2 = '@2'; 122 var at2 = '@2';
127 123
128 var array_proto = []; 124 var array_proto = [];
129 array_proto[0] = at0; 125 array_proto[0] = at0;
130 array_proto[2] = at2; 126 array_proto[2] = at2;
131 array.__proto__ = array_proto; 127 array.__proto__ = array_proto;
132 128
133 // array owns nothing... 129 // array owns nothing...
134 assertFalse(array.hasOwnProperty(0)); 130 assertFalse(array.hasOwnProperty(0));
135 assertFalse(array.hasOwnProperty(1)); 131 assertFalse(array.hasOwnProperty(1));
136 assertFalse(array.hasOwnProperty(2)); 132 assertFalse(array.hasOwnProperty(2));
137 133
138 // ... but sees values from array_proto. 134 // ... but sees values from array_proto.
139 assertEquals(array[0], at0); 135 assertEquals(array[0], at0);
140 assertEquals(array[1], undefined); 136 assertEquals(array[1], undefined);
141 assertEquals(array[2], at2); 137 assertEquals(array[2], at2);
142 138
143 assertEquals(len, array.unshift()); 139 assertEquals(len, array.unshift());
144 140
145 // unshift makes array own 0 and 2... 141 // array still owns nothing.
146 assertTrue(array.hasOwnProperty(0)); 142 assertFalse(array.hasOwnProperty(0));
147 assertFalse(array.hasOwnProperty(1)); 143 assertFalse(array.hasOwnProperty(1));
148 assertTrue(array.hasOwnProperty(2)); 144 assertFalse(array.hasOwnProperty(2));
149 145
150 // ... so they are not affected be delete. 146 // ... but still sees values from array_proto.
151 assertEquals(array[0], at0); 147 assertEquals(array[0], at0);
152 assertEquals(array[1], undefined); 148 assertEquals(array[1], undefined);
153 assertEquals(array[2], at2); 149 assertEquals(array[2], at2);
154 })(); 150 })();
155 151
156 152
157 // Now check the case with array of holes and some elements on prototype. 153 // Now check the case with array of holes and some elements on prototype.
158 (function() { 154 (function() {
159 var len = 9; 155 var len = 9;
160 var array = new Array(len); 156 var array = new Array(len);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 array.unshift(1) 217 array.unshift(1)
222 assertEquals([1, 2, 3], array); 218 assertEquals([1, 2, 3], array);
223 219
224 array = [2]; 220 array = [2];
225 array.length = 2; 221 array.length = 2;
226 array.__proto__[1] = 3; 222 array.__proto__[1] = 3;
227 Object.defineProperty(array.__proto__, '1', {enumerable: false}); 223 Object.defineProperty(array.__proto__, '1', {enumerable: false});
228 array.unshift(1); 224 array.unshift(1);
229 assertEquals([1, 2, 3], array); 225 assertEquals([1, 2, 3], array);
230 })(); 226 })();
OLDNEW
« no previous file with comments | « src/array.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698