(function () {
  "use strict";

  var forEachAsync = require('./forEachAsync').forEachAsync
    ;

  forEachAsync([0, 500, 70, 200, 400, 100], function (next, element, i, arr) {
    // test that array order is as expected
    console.log(element, 'is element', i, 'of', arr.length);

    // test that thisness is applied
    this[element] = i;

    if (i > 2) {
      // test that synchronous callbacks don't mess things up
      next();
    } else {
      // test asynchronous callbacks
      setTimeout(next, element);
    }
  }, {}).then(function () {
    // test that thisness carries
    console.log(this);
  }).then(function () {
    // test then chaining
    console.log("now wasn't that nice?");
  });

}());