|
1 function test1() { |
|
2 // splice GetElement calls are observable and should be executed even if |
|
3 // the return value of splice is unused. |
|
4 Object.defineProperty(Object.prototype, "0", {get: function() { |
|
5 c++; |
|
6 }, set: function() {}}); |
|
7 var arr = [,,,]; |
|
8 var c = 0; |
|
9 for (var i=0; i<100; i++) { |
|
10 arr.splice(0, 1); |
|
11 arr.length = 1; |
|
12 } |
|
13 |
|
14 assertEq(c, 100); |
|
15 } |
|
16 test1(); |
|
17 |
|
18 function test2() { |
|
19 var arr = []; |
|
20 for (var i=0; i<100; i++) |
|
21 arr.push(i); |
|
22 for (var i=0; i<40; i++) |
|
23 arr.splice(0, 2); |
|
24 assertEq(arr.length, 20); |
|
25 assertEq(arr[0], 80); |
|
26 } |
|
27 test2(); |
|
28 |
|
29 function testNonArray() { |
|
30 for (var i=0; i<10; i++) { |
|
31 var o = {splice:[].splice, 0:"a", 1:"b", 2:"c", length:3}; |
|
32 o.splice(0, 2); |
|
33 assertEq(o.length, 1); |
|
34 assertEq(o[0], "c"); |
|
35 } |
|
36 } |
|
37 testNonArray(); |