// 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(){})");