tor-browser

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

constructor-iterable.js (1363B)


      1 function testNullUndefined() {
      2  for (var i = 0; i < 100; i++) {
      3    var v = (i & 1) ? null : undefined;
      4 
      5    var map = new Map(v);
      6    assertEq(map.size, 0);
      7 
      8    var set = new Set(v);
      9    assertEq(set.size, 0);
     10  }
     11 }
     12 testNullUndefined();
     13 
     14 function testProtoGetter() {
     15  var count = 0;
     16  Object.defineProperty(Array.prototype, 1, { get: () => count++ });
     17  for (var i = 0; i < 100; i++) {
     18    var map = new Map([
     19      [1, 1],
     20      [2, 2],
     21      [3, /* hole */, 3],
     22    ]);
     23    assertEq(map.size, 3);
     24    assertEq(map.get(3), i * 3);
     25 
     26    var set = new Set(["a", /* hole */, "c"]);
     27    assertEq(set.size, 3);
     28    assertEq(set.has(i * 3 + 1), true);
     29 
     30    new Set([1, /* hole */,]); // Side-effects! Must not be optimized away.
     31  }
     32  assertEq(count, 300);
     33 }
     34 testProtoGetter();
     35 
     36 // The |iterable| argument can be a primitive value.
     37 function testPrimitiveIterable() {
     38  Number.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
     39  Number.prototype.length = 2;
     40  Number.prototype[0] = ["a", "b"];
     41  Number.prototype[1] = ["c", "d"];
     42 
     43  for (var i = 0; i < 100; i++) {
     44    var map = new Map(i);
     45    assertEq(map.size, 2);
     46    assertEq(map.get("c"), "d");
     47 
     48    var set = new Set(i);
     49    assertEq(set.size, 2);
     50    assertEq(set.has(Number.prototype[1]), true);
     51 
     52    var set2 = new Set("abc123abc");
     53    assertEq(set2.size, 6);
     54  }
     55 }
     56 testPrimitiveIterable();