X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/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 index 0000000..67e0a28 --- /dev/null +++ b/tests/stress/array-from-with-iterable.js @@ -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]); + } +}