"use strict";

var Q = require("../q");

suite("Chaining", function () {
    var numberToChain = 1000;

    bench("Chaining many already-fulfilled promises together", function (done) {
        var currentPromise = Q();
        for (var i = 0; i < numberToChain; ++i) {
            currentPromise = currentPromise.then(function () {
                return Q();
            });
        }

        currentPromise.then(done);
    });

    bench("Chaining and then fulfilling the end of the chain", function (done) {
        var deferred = Q.defer();

        var currentPromise = deferred.promise;
        for (var i = 0; i < numberToChain; ++i) {
            (function () {
                var promiseToReturn = currentPromise;
                currentPromise = Q().then(function () {
                    return promiseToReturn;
                });
            }());
        }

        currentPromise.then(done);

        deferred.resolve();
    });
});
