Source code

Revision control

Copy as Markdown

Other Tools

/*
* Any copyright is dedicated to the Public Domain.
*/
var BUGNUMBER = 1704385;
var summary = "Implement %TypedArray%.prototype.{findLast, findLastIndex}";
print(BUGNUMBER + ": " + summary);
const methods = ["findLast", "findLastIndex"];
anyTypedArrayConstructors.forEach(constructor => {
methods.forEach(method => {
var arr = new constructor([0, 1, 2, 3, 4, 5]);
// test that this.length is never called
Object.defineProperty(arr, "length", {
get() {
throw new Error("length accessor called");
}
});
assertEq(arr[method].length, 1);
assertEq(arr[method](v => v === 3), 3);
assertEq(arr[method](v => v === 6), method === "findLast" ? undefined : -1);
var thisValues = [undefined, null, true, 1, "foo", [], {}];
if (typeof Symbol == "function")
thisValues.push(Symbol());
thisValues.forEach(thisArg =>
assertThrowsInstanceOf(() => arr[method].call(thisArg, () => true), TypeError)
);
assertThrowsInstanceOf(() => arr[method](), TypeError);
assertThrowsInstanceOf(() => arr[method](1), TypeError);
});
});
anyTypedArrayConstructors.filter(isFloatConstructor).forEach(constructor => {
var arr = new constructor([-0, 0, 1, 5, NaN, 6]);
assertEq(arr.findLast(v => Number.isNaN(v)), NaN);
assertEq(arr.findLastIndex(v => Number.isNaN(v)), 4);
assertEq(arr.findLast(v => Object.is(v, 0)), 0);
assertEq(arr.findLastIndex(v => Object.is(v, 0)), 1);
assertEq(arr.findLast(v => Object.is(v, -0)), -0);
assertEq(arr.findLastIndex(v => Object.is(v, -0)), 0);
})
if (typeof reportCompare === "function")
reportCompare(true, true);