has-sparse.js (1522B)
1 function sparse() { 2 var o = {0: 0, 0x10000: 0}; 3 4 var tests = [[1, false], [0, true], [-2, false], [0x10000, true], [0x20000, false]]; 5 for (var [key, has] of tests) { 6 assertEq(key in o, has); 7 assertEq(o.hasOwnProperty(key), has); 8 } 9 } 10 11 function typedArray() { 12 var o = {0: 0, 0x10000: 0}; 13 var t = new Int32Array(0x10001) 14 15 // Only use Int32Array after we attached the sparse stub 16 // in o, in t 17 var tests = [[1, [false, true]], 18 [0, [true, true]], 19 [-2, [false, false]], 20 [0x10000, [true, true]], 21 [0x20000, [false, false]]]; 22 23 for (var i = 0; i < 10; i++) { 24 for (var [key, has] of tests) { 25 assertEq(key in o, has[i > 5 ? 1 : 0]); 26 assertEq(o.hasOwnProperty(key), has[i > 5 ? 1 : 0]); 27 } 28 29 if (i == 5) 30 o = t; 31 } 32 } 33 34 function protoChange() { 35 var o = {0: 0, 0x10000: 0}; 36 37 var tests = [[1, [false, true]], 38 [0, [true, true]], 39 [-2, [false, false]], 40 [0x10000, [true, true]], 41 [0x20000, [false, false]]]; 42 43 for (var i = 0; i < 10; i++) { 44 for (var [key, has] of tests) { 45 assertEq(key in o, has[i > 5 ? 1 : 0]); 46 // Proto change doesn't affect hasOwnProperty. 47 assertEq(o.hasOwnProperty(key), has[0]); 48 } 49 50 if (i == 5) 51 o.__proto__ = [1, 1, 1, 1]; 52 } 53 } 54 55 sparse(); 56 typedArray(); 57 protoChange();