(() => {
  let nextCalled = 0;
  ([])[Symbol.iterator]().__proto__.next = () => {
    nextCalled++;
    return {value: nextCalled, done: false};
  };

  assertEq(nextCalled, 0);
  let [a,b] = [1,2,3];
  assertEq(nextCalled, 2);
  assertEq(a, 1);
  assertEq(b, 2);
})();