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