fold-in.js (730B)
1 // Singleton 2 function f() { 3 var res = 0; 4 for (var i=0; i<500; i++) 5 res += ("abcd" in Math); 6 return res; 7 } 8 assertEq(f(), 0); 9 Math.abcd = 3; 10 assertEq(f(), 500); 11 delete Math.abcd; 12 assertEq(f(), 0); 13 14 // Non-singleton 15 function O(x) { if (x) this.x = 1; } 16 17 var arr = []; 18 for (var i=0; i<4; i++) 19 arr.push(new O(i % 2)); 20 21 function g(arr) { 22 var res = 0; 23 for (var i=0; i<500; i++) { 24 var o = arr[i % arr.length]; 25 res += "x" in o; 26 res += "abcd" in o; 27 } 28 return res; 29 } 30 assertEq(g(arr), 250); 31 arr[0].abcd = 3; 32 assertEq(g(arr), 375); 33 34 function testPrimitive() { 35 var x = 7; 36 var c = 0; 37 for (var i=0; i<5; i++) { 38 try { 39 "z" in x; 40 } catch(e) { c++; } 41 } 42 assertEq(c, 5); 43 } 44 testPrimitive();