summaryrefslogtreecommitdiffstats
path: root/js/src/tests/js1_6/Array/generics.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/js1_6/Array/generics.js')
-rw-r--r--js/src/tests/js1_6/Array/generics.js331
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);