diff options
Diffstat (limited to 'js/src/tests/js1_6/Array/generics.js')
-rw-r--r-- | js/src/tests/js1_6/Array/generics.js | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/js/src/tests/js1_6/Array/generics.js b/js/src/tests/js1_6/Array/generics.js new file mode 100644 index 000000000..c72149114 --- /dev/null +++ b/js/src/tests/js1_6/Array/generics.js @@ -0,0 +1,331 @@ +var BUGNUMBER = 1263558; +var summary = "Self-host all Array generics."; + +print(BUGNUMBER + ": " + summary); + +var arr, arrLike, tmp, f; + +function reset() { + arr = [5, 7, 13]; + arrLike = { + length: 3, + 0: 5, + 1: 7, + 2: 13, + toString() { + return "arrLike"; + } + }; + tmp = []; +} +function toString() { + return "G"; +} + +// Array.join (test this first to use it in remaining tests). +reset(); +assertThrowsInstanceOf(() => Array.join(), TypeError); +assertEq(Array.join(arr), "5,7,13"); +assertEq(Array.join(arr, "-"), "5-7-13"); +assertEq(Array.join(arrLike), "5,7,13"); +assertEq(Array.join(arrLike, "-"), "5-7-13"); + +// Array.concat. +reset(); +assertThrowsInstanceOf(() => Array.concat(), TypeError); +assertEq(Array.join(Array.concat(arr), ","), "5,7,13"); +assertEq(Array.join(Array.concat(arr, 11), ","), "5,7,13,11"); +assertEq(Array.join(Array.concat(arr, 11, 17), ","), "5,7,13,11,17"); +assertEq(Array.join(Array.concat(arrLike), ","), "arrLike"); +assertEq(Array.join(Array.concat(arrLike, 11), ","), "arrLike,11"); +assertEq(Array.join(Array.concat(arrLike, 11, 17), ","), "arrLike,11,17"); + +// Array.lastIndexOf. +reset(); +assertThrowsInstanceOf(() => Array.lastIndexOf(), TypeError); +assertEq(Array.lastIndexOf(arr), -1); +assertEq(Array.lastIndexOf(arr, 1), -1); +assertEq(Array.lastIndexOf(arr, 5), 0); +assertEq(Array.lastIndexOf(arr, 7), 1); +assertEq(Array.lastIndexOf(arr, 13, 1), -1); +assertEq(Array.lastIndexOf(arrLike), -1); +assertEq(Array.lastIndexOf(arrLike, 1), -1); +assertEq(Array.lastIndexOf(arrLike, 5), 0); +assertEq(Array.lastIndexOf(arrLike, 7), 1); +assertEq(Array.lastIndexOf(arrLike, 13, 1), -1); + +// Array.indexOf. +reset(); +assertThrowsInstanceOf(() => Array.indexOf(), TypeError); +assertEq(Array.indexOf(arr), -1); +assertEq(Array.indexOf(arr, 1), -1); +assertEq(Array.indexOf(arr, 5), 0); +assertEq(Array.indexOf(arr, 7), 1); +assertEq(Array.indexOf(arr, 1, 5), -1); +assertEq(Array.indexOf(arrLike), -1); +assertEq(Array.indexOf(arrLike, 1), -1); +assertEq(Array.indexOf(arrLike, 5), 0); +assertEq(Array.indexOf(arrLike, 7), 1); +assertEq(Array.indexOf(arrLike, 1, 5), -1); + +// Array.forEach. +reset(); +assertThrowsInstanceOf(() => Array.forEach(), TypeError); +assertThrowsInstanceOf(() => Array.forEach(arr), TypeError); +assertThrowsInstanceOf(() => Array.forEach(arrLike), TypeError); +f = function(...args) { + tmp.push(this, ...args); +}; +tmp = []; +Array.forEach(arr, f); +assertEq(tmp.join(","), "G,5,0,5,7,13," + "G,7,1,5,7,13," + "G,13,2,5,7,13"); +tmp = []; +Array.forEach(arr, f, "T"); +assertEq(tmp.join(","), "T,5,0,5,7,13," + "T,7,1,5,7,13," + "T,13,2,5,7,13"); +tmp = []; +Array.forEach(arrLike, f); +assertEq(tmp.join(","), "G,5,0,arrLike," + "G,7,1,arrLike," + "G,13,2,arrLike"); +tmp = []; +Array.forEach(arrLike, f, "T"); +assertEq(tmp.join(","), "T,5,0,arrLike," + "T,7,1,arrLike," + "T,13,2,arrLike"); + +// Array.map. +reset(); +assertThrowsInstanceOf(() => Array.map(), TypeError); +assertThrowsInstanceOf(() => Array.map(arr), TypeError); +assertThrowsInstanceOf(() => Array.map(arrLike), TypeError); +f = function(...args) { + tmp.push(this, ...args); + return args[0] * 2; +} +tmp = []; +assertEq(Array.join(Array.map(arr, f), ","), "10,14,26"); +assertEq(tmp.join(","), "G,5,0,5,7,13," + "G,7,1,5,7,13," + "G,13,2,5,7,13"); +tmp = []; +assertEq(Array.join(Array.map(arr, f, "T"), ","), "10,14,26"); +assertEq(tmp.join(","), "T,5,0,5,7,13," + "T,7,1,5,7,13," + "T,13,2,5,7,13"); +tmp = []; +assertEq(Array.join(Array.map(arrLike, f), ","), "10,14,26"); +assertEq(tmp.join(","), "G,5,0,arrLike," + "G,7,1,arrLike," + "G,13,2,arrLike"); +tmp = []; +assertEq(Array.join(Array.map(arrLike, f, "T"), ","), "10,14,26"); +assertEq(tmp.join(","), "T,5,0,arrLike," + "T,7,1,arrLike," + "T,13,2,arrLike"); + +// Array.filter. +reset(); +assertThrowsInstanceOf(() => Array.filter(), TypeError); +assertThrowsInstanceOf(() => Array.filter(arr), TypeError); +assertThrowsInstanceOf(() => Array.filter(arrLike), TypeError); +f = function(...args) { + tmp.push(this, ...args); + return args[0] < 10; +} +tmp = []; +assertEq(Array.join(Array.filter(arr, f), ","), "5,7"); +assertEq(tmp.join(","), "G,5,0,5,7,13," + "G,7,1,5,7,13," + "G,13,2,5,7,13"); +tmp = []; +assertEq(Array.join(Array.filter(arr, f, "T"), ","), "5,7"); +assertEq(tmp.join(","), "T,5,0,5,7,13," + "T,7,1,5,7,13," + "T,13,2,5,7,13"); +tmp = []; +assertEq(Array.join(Array.filter(arrLike, f), ","), "5,7"); +assertEq(tmp.join(","), "G,5,0,arrLike," + "G,7,1,arrLike," + "G,13,2,arrLike"); +tmp = []; +assertEq(Array.join(Array.filter(arrLike, f, "T"), ","), "5,7"); +assertEq(tmp.join(","), "T,5,0,arrLike," + "T,7,1,arrLike," + "T,13,2,arrLike"); + +// Array.every. +reset(); +assertThrowsInstanceOf(() => Array.every(), TypeError); +assertThrowsInstanceOf(() => Array.every(arr), TypeError); +assertThrowsInstanceOf(() => Array.every(arrLike), TypeError); +f = function(...args) { + tmp.push(this, ...args); + return args[0] < 6; +} +tmp = []; +assertEq(Array.every(arr, f), false); +assertEq(tmp.join(","), "G,5,0,5,7,13," + "G,7,1,5,7,13"); +tmp = []; +assertEq(Array.every(arr, f, "T"), false); +assertEq(tmp.join(","), "T,5,0,5,7,13," + "T,7,1,5,7,13"); +tmp = []; +assertEq(Array.every(arrLike, f), false); +assertEq(tmp.join(","), "G,5,0,arrLike," + "G,7,1,arrLike"); +tmp = []; +assertEq(Array.every(arrLike, f, "T"), false); +assertEq(tmp.join(","), "T,5,0,arrLike," + "T,7,1,arrLike"); + +// Array.some. +reset(); +assertThrowsInstanceOf(() => Array.some(), TypeError); +assertThrowsInstanceOf(() => Array.some(arr), TypeError); +assertThrowsInstanceOf(() => Array.some(arrLike), TypeError); +f = function(...args) { + tmp.push(this, ...args); + return args[0] == 7; +} +tmp = []; +assertEq(Array.some(arr, f), true); +assertEq(tmp.join(","), "G,5,0,5,7,13," + "G,7,1,5,7,13"); +tmp = []; +assertEq(Array.some(arr, f, "T"), true); +assertEq(tmp.join(","), "T,5,0,5,7,13," + "T,7,1,5,7,13"); +tmp = []; +assertEq(Array.some(arrLike, f), true); +assertEq(tmp.join(","), "G,5,0,arrLike," + "G,7,1,arrLike"); +tmp = []; +assertEq(Array.some(arrLike, f, "T"), true); +assertEq(tmp.join(","), "T,5,0,arrLike," + "T,7,1,arrLike"); + +// Array.reduce. +reset(); +assertThrowsInstanceOf(() => Array.reduce(), TypeError); +assertThrowsInstanceOf(() => Array.reduce(arr), TypeError); +assertThrowsInstanceOf(() => Array.reduce(arrLike), TypeError); +f = function(...args) { + tmp.push(...args); + return args[0] + args[1]; +} +tmp = []; +assertEq(Array.reduce(arr, f), 25); +assertEq(tmp.join(","), "5,7,1,5,7,13," + "12,13,2,5,7,13"); +tmp = []; +assertEq(Array.reduce(arr, f, 17), 42); +assertEq(tmp.join(","), "17,5,0,5,7,13," + "22,7,1,5,7,13," + "29,13,2,5,7,13"); +tmp = []; +assertEq(Array.reduce(arrLike, f), 25); +assertEq(tmp.join(","), "5,7,1,arrLike," + "12,13,2,arrLike"); +tmp = []; +assertEq(Array.reduce(arrLike, f, 17), 42); +assertEq(tmp.join(","), "17,5,0,arrLike," + "22,7,1,arrLike," + "29,13,2,arrLike"); + +// Array.reduceRight. +reset(); +assertThrowsInstanceOf(() => Array.reduceRight(), TypeError); +assertThrowsInstanceOf(() => Array.reduceRight(arr), TypeError); +assertThrowsInstanceOf(() => Array.reduceRight(arrLike), TypeError); +f = function(...args) { + tmp.push(...args); + return args[0] + args[1]; +} +tmp = []; +assertEq(Array.reduceRight(arr, f), 25); +assertEq(tmp.join(","), "13,7,1,5,7,13," + "20,5,0,5,7,13"); +tmp = []; +assertEq(Array.reduceRight(arr, f, 17), 42); +assertEq(tmp.join(","), "17,13,2,5,7,13," + "30,7,1,5,7,13," + "37,5,0,5,7,13"); +tmp = []; +assertEq(Array.reduceRight(arrLike, f), 25); +assertEq(tmp.join(","), "13,7,1,arrLike," + "20,5,0,arrLike"); +tmp = []; +assertEq(Array.reduceRight(arrLike, f, 17), 42); +assertEq(tmp.join(","), "17,13,2,arrLike," + "30,7,1,arrLike," + "37,5,0,arrLike"); + +// Array.reverse. +reset(); +assertThrowsInstanceOf(() => Array.reverse(), TypeError); +assertEq(Array.join(Array.reverse(arr), ","), "13,7,5"); +assertEq(Array.join(arr, ","), "13,7,5"); +assertEq(Array.join(Array.reverse(arrLike), ","), "13,7,5"); +assertEq(Array.join(arrLike, ","), "13,7,5"); + +// Array.sort. +reset(); +assertThrowsInstanceOf(() => Array.sort(), TypeError); +f = function(x, y) { + return y - x; +} +assertEq(Array.join(Array.sort(arr), ","), "13,5,7"); +assertEq(Array.join(Array.sort(arr, f), ","), "13,7,5"); +assertEq(Array.join(Array.sort(arrLike), ","), "13,5,7"); +assertEq(Array.join(Array.sort(arrLike, f), ","), "13,7,5"); + +// Array.push. +reset(); +assertThrowsInstanceOf(() => Array.push(), TypeError); +assertEq(Array.push(arr), 3); +assertEq(Array.join(arr), "5,7,13"); +assertEq(Array.push(arr, 17), 4); +assertEq(Array.join(arr), "5,7,13,17"); +assertEq(Array.push(arr, 19, 21), 6); +assertEq(Array.join(arr), "5,7,13,17,19,21"); +assertEq(Array.push(arrLike), 3); +assertEq(Array.join(arrLike), "5,7,13"); +assertEq(Array.push(arrLike, 17), 4); +assertEq(Array.join(arrLike), "5,7,13,17"); +assertEq(Array.push(arrLike, 19, 21), 6); +assertEq(Array.join(arrLike), "5,7,13,17,19,21"); + +// Array.pop. +reset(); +assertThrowsInstanceOf(() => Array.pop(), TypeError); +assertEq(Array.pop(arr), 13); +assertEq(Array.join(arr), "5,7"); +assertEq(Array.pop(arr), 7); +assertEq(Array.join(arr), "5"); +assertEq(Array.pop(arrLike), 13); +assertEq(Array.join(arrLike), "5,7"); +assertEq(Array.pop(arrLike), 7); +assertEq(Array.join(arrLike), "5"); + +// Array.shift. +reset(); +assertThrowsInstanceOf(() => Array.shift(), TypeError); +assertEq(Array.shift(arr), 5); +assertEq(Array.join(arr), "7,13"); +assertEq(Array.shift(arr), 7); +assertEq(Array.join(arr), "13"); +assertEq(Array.shift(arrLike), 5); +assertEq(Array.join(arrLike), "7,13"); +assertEq(Array.shift(arrLike), 7); +assertEq(Array.join(arrLike), "13"); + +// Array.unshift. +reset(); +assertThrowsInstanceOf(() => Array.unshift(), TypeError); +assertEq(Array.unshift(arr), 3); +assertEq(Array.join(arr), "5,7,13"); +assertEq(Array.unshift(arr, 17), 4); +assertEq(Array.join(arr), "17,5,7,13"); +assertEq(Array.unshift(arr, 19, 21), 6); +assertEq(Array.join(arr), "19,21,17,5,7,13"); +assertEq(Array.unshift(arrLike), 3); +assertEq(Array.join(arrLike), "5,7,13"); +assertEq(Array.unshift(arrLike, 17), 4); +assertEq(Array.join(arrLike), "17,5,7,13"); +assertEq(Array.unshift(arrLike, 19, 21), 6); +assertEq(Array.join(arrLike), "19,21,17,5,7,13"); + +// Array.splice. +reset(); +assertThrowsInstanceOf(() => Array.splice(), TypeError); +assertEq(Array.join(Array.splice(arr)), ""); +assertEq(Array.join(arr), "5,7,13"); +assertEq(Array.join(Array.splice(arr, 1)), "7,13"); +assertEq(Array.join(arr), "5"); +reset(); +assertEq(Array.join(Array.splice(arr, 1, 1)), "7"); +assertEq(Array.join(arr), "5,13"); +reset(); +assertEq(Array.join(Array.splice(arrLike)), ""); +assertEq(Array.join(arrLike), "5,7,13"); +assertEq(Array.join(Array.splice(arrLike, 1)), "7,13"); +assertEq(Array.join(arrLike), "5"); +reset(); +assertEq(Array.join(Array.splice(arrLike, 1, 1)), "7"); +assertEq(Array.join(arrLike), "5,13"); + +// Array.slice. +reset(); +assertThrowsInstanceOf(() => Array.slice(), TypeError); +assertEq(Array.join(Array.slice(arr)), "5,7,13"); +assertEq(Array.join(Array.slice(arr, 1)), "7,13"); +assertEq(Array.join(Array.slice(arr, 1, 1)), ""); +assertEq(Array.join(Array.slice(arr, 1, 2)), "7"); +assertEq(Array.join(Array.slice(arrLike)), "5,7,13"); +assertEq(Array.join(Array.slice(arrLike, 1)), "7,13"); +assertEq(Array.join(Array.slice(arrLike, 1, 1)), ""); +assertEq(Array.join(Array.slice(arrLike, 1, 2)), "7"); + +if (typeof reportCompare === "function") + reportCompare(true, true); |