text: // Reviewed
  //@ runDefault
  
  function assert(x) {
      if (!x)
          throw Error("Bad");
  }
  
  function shouldThrow(expr) {
      let testFunc = new Function(expr);
      for (let i = 0; i < 10000; i++) {
          let error;
          try {
              testFunc();
          } catch (e) {
              error = e;
          }
          assert(error);
      }
  }
  
  function shouldNotThrow(expr) {
      let testFunc = new Function(expr);
      for (let i = 0; i < 10000; i++) {
          let error;
          try {
              testFunc();
          } catch (e) {
              error = e;
          }
          assert(!error);
      }
  }
  
  function foo() { }
  
  shouldThrow("foo.apply(undefined, true)");
  shouldThrow("foo.apply(undefined, false)");
  shouldThrow("foo.apply(undefined, 100)");
  shouldThrow("foo.apply(undefined, 123456789.12345)");
  shouldThrow("foo.apply(undefined, 1.0/1.0)");
  shouldThrow("foo.apply(undefined, 1.0/0)");
  shouldThrow("foo.apply(undefined, 'hello')");
  shouldThrow("foo.apply(undefined, Symbol())");
  
  shouldNotThrow("foo.apply(undefined, undefined)");
  shouldNotThrow("foo.apply(undefined, null)");
  shouldNotThrow("foo.apply(undefined, {})");
  shouldNotThrow("foo.apply(undefined, [])");
  shouldNotThrow("foo.apply(undefined, function(){})");
  