array-from-with-iterable.js   [plain text]


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]);
    }
}