Source code

Revision control

Copy as Markdown

Other Tools

// Array.prototype.sort throws if the comparator is neither undefined nor
// a callable object.
// Use a zero length array, so we can provide any kind of callable object
// without worrying that the function is actually a valid comparator function.
const array = new Array(0);
// Throws if the comparator is neither undefined nor callable.
for (let invalidComparator of [null, 0, true, Symbol(), {}, []]) {
assertThrowsInstanceOf(() => array.sort(invalidComparator), TypeError);
}
// Doesn't throw if the comparator is undefined or a callable object.
for (let validComparator of [undefined, () => {}, Math.max, class {}, new Proxy(function(){}, {})]) {
array.sort(validComparator);
}
// Also doesn't throw if no comparator was provided at all.
array.sort();
if (typeof reportCompare === "function")
reportCompare(0, 0);