123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- load("test-common.js");
- try {
- assert(Array.prototype.reduceRight.length === 1);
- assertThrowsError(
- () => {
- [1].reduceRight();
- },
- {
- error: TypeError,
- message: "Array.prototype.reduceRight() requires at least one argument",
- }
- );
- assertThrowsError(
- () => {
- [1].reduceRight(undefined);
- },
- {
- error: TypeError,
- message: "undefined is not a function",
- }
- );
- assertThrowsError(
- () => {
- [].reduceRight((a, x) => x);
- },
- {
- error: TypeError,
- message: "Reduce of empty array with no initial value",
- }
- );
- assertThrowsError(
- () => {
- [, ,].reduceRight((a, x) => x);
- },
- {
- error: TypeError,
- message: "Reduce of empty array with no initial value",
- }
- );
- [1, 2].reduceRight(function () {
- assert(this === undefined);
- });
- var callbackCalled = 0;
- var callback = () => {
- callbackCalled++;
- return true;
- };
- assert([1].reduceRight(callback) === 1);
- assert(callbackCalled === 0);
- assert([1].reduceRight(callback) === 1);
- assert(callbackCalled === 0);
- callbackCalled = 0;
- assert([1, 2, 3].reduceRight(callback) === true);
- assert(callbackCalled === 2);
- callbackCalled = 0;
- assert([1, 2, 3, ,].reduceRight(callback) === true);
- assert(callbackCalled === 2);
- callbackCalled = 0;
- assert([, , , 1, , , 10, , 100, , ,].reduceRight(callback) === true);
- assert(callbackCalled === 2);
- var constantlySad = () => ":^(";
- var result = [].reduceRight(constantlySad, ":^)");
- assert(result === ":^)");
- result = [":^0"].reduceRight(constantlySad, ":^)");
- assert(result === ":^(");
- result = [":^0"].reduceRight(constantlySad);
- assert(result === ":^0");
- result = [5, 4, 3, 2, 1].reduceRight((accum, elem) => "" + accum + elem);
- assert(result === "12345");
- result = [1, 2, 3, 4, 5, 6].reduceRight((accum, elem) => {
- return "" + accum + elem;
- }, 100);
- assert(result === "100654321");
- result = [6, 5, 4, 3, 2, 1].reduceRight((accum, elem) => {
- return "" + accum + elem;
- }, 100);
- assert(result === "100123456");
- var indexes = [];
- result = ["foo", 1, true].reduceRight((a, v, i) => {
- indexes.push(i);
- });
- assert(result === undefined);
- assert(indexes.length === 2);
- assert(indexes[0] === 1);
- assert(indexes[1] === 0);
- indexes = [];
- result = ["foo", 1, true].reduceRight((a, v, i) => {
- indexes.push(i);
- }, "foo");
- assert(result === undefined);
- assert(indexes.length === 3);
- assert(indexes[0] === 2);
- assert(indexes[1] === 1);
- assert(indexes[2] === 0);
- var mutable = { prop: 0 };
- result = ["foo", 1, true].reduceRight((a, v) => {
- a.prop = v;
- return a;
- }, mutable);
- assert(result === mutable);
- assert(result.prop === "foo");
- var a1 = [1, 2];
- var a2 = null;
- a1.reduceRight((a, v, i, t) => {
- a2 = t;
- });
- assert(a1 === a2);
- console.log("PASS");
- } catch (e) {
- console.log("FAIL: " + e);
- }
|