]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - tests/stress/array-from-with-iterable.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / tests / stress / array-from-with-iterable.js
diff --git a/tests/stress/array-from-with-iterable.js b/tests/stress/array-from-with-iterable.js
new file mode 100644 (file)
index 0000000..67e0a28
--- /dev/null
@@ -0,0 +1,69 @@
+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error('bad value: ' + actual);
+}
+
+// Set is iterable.
+var set = new Set([0, 1, 2, 3, 4, 5]);
+var array = Array.from(set);
+
+shouldBe(array.length, set.size);
+for (var i = 0; i < array.length; ++i) {
+    shouldBe(set.has(array[i]), true);
+}
+
+// Map is iterable.
+var map = new Map([
+    [0, 0],
+    [1, 0],
+    [2, 0],
+    [3, 0],
+    [4, 0],
+    [5, 0]
+]);
+var array = Array.from(map);
+
+shouldBe(array.length, map.size);
+for (var i = 0; i < array.length; ++i) {
+    shouldBe(array[i][1], 0);
+    shouldBe(map.has(array[i][0]), true);
+    shouldBe(map.get(array[i][0]), 0);
+}
+
+// String is iterable
+var string = "Cocoa Cappuccino";
+var array = Array.from(string);
+shouldBe(array.length, string.length);
+for (var i = 0; i < array.length; ++i) {
+    shouldBe(array[i], string[i]);
+}
+
+// Arguments is iterable
+var argumentsGenerators = [
+    function () {
+        return arguments;
+    },
+
+    function () {
+        'use strict';
+        return arguments;
+    },
+
+    function (a, b, c) {
+        return arguments;
+    },
+
+    function (a, b, c) {
+        'use strict';
+        return arguments;
+    }
+];
+
+for (var gen of argumentsGenerators) {
+    var args = gen(1, 2, 3, 4, 5);
+    var array = Array.from(args);
+    shouldBe(array.length, args.length);
+    for (var i = 0; i < array.length; ++i) {
+        shouldBe(array[i], args[i]);
+    }
+}