tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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();