nativeElementAccesses.js (916B)
1 function testOverwritingSparseHole() 2 { 3 var x = []; 4 for (var i = 0; i < 50; i++) 5 x[i] = i; 6 var hit = false; 7 Object.defineProperty(x, 40, {set: function() { hit = true; }}); 8 for (var i = 0; i < 50; i++) 9 x[i] = 10; 10 assertEq(hit, true); 11 } 12 testOverwritingSparseHole(); 13 14 function testReadingSparseHole() 15 { 16 var x = []; 17 for (var i = 5; i < 50; i++) 18 x[i] = i; 19 var hit = false; 20 Object.defineProperty(x, 40, {get: function() { hit = true; return 5.5; }}); 21 var res = 0; 22 for (var i = 0; i < 50; i++) { 23 res += x[i]; 24 if (i == 10) 25 res = 0; 26 } 27 assertEq(res, 1135.5); 28 assertEq(hit, true); 29 } 30 testReadingSparseHole(); 31 32 function testInSparseHole() 33 { 34 var x = []; 35 for (var i = 5; i < 50; i++) 36 x[i] = i; 37 Object.defineProperty(x, 40, {get: function() {}}); 38 var res = 0; 39 for (var i = 0; i < 50; i++) 40 res += (i in x) ? 1 : 0; 41 assertEq(res, 45); 42 } 43 testInSparseHole();