load(libdir + "asserts.js"); load(libdir + "iteration.js"); assertThrowsInstanceOf(() => Math.sin(...true), TypeError); assertThrowsInstanceOf(() => Math.sin(...false), TypeError); assertThrowsInstanceOf(() => Math.sin(...new Date()), TypeError); assertThrowsInstanceOf(() => Math.sin(...Function("")), TypeError); assertThrowsInstanceOf(() => Math.sin(...function () {}), TypeError); assertThrowsInstanceOf(() => Math.sin(...(x => x)), TypeError); assertThrowsInstanceOf(() => Math.sin(...1), TypeError); assertThrowsInstanceOf(() => Math.sin(...{}), TypeError); var foo = {} foo[Symbol.iterator] = 10; assertThrowsInstanceOf(() => Math.sin(...foo), TypeError); foo[Symbol.iterator] = function() undefined; assertThrowsInstanceOf(() => Math.sin(...foo), TypeError); foo[Symbol.iterator] = function() this; assertThrowsInstanceOf(() => Math.sin(...foo), TypeError); foo[Symbol.iterator] = function() this; foo.next = function() { throw 10; }; assertThrowsValue(() => Math.sin(...foo), 10); assertThrowsInstanceOf(() => Math.sin(.../a/), TypeError); assertThrowsInstanceOf(() => Math.sin(...new Error()), TypeError);