diff options
author | Graeme Yeates <yeatesgraeme@gmail.com> | 2016-10-15 12:05:09 -0400 |
---|---|---|
committer | Graeme Yeates <yeatesgraeme@gmail.com> | 2016-10-15 12:11:14 -0400 |
commit | 509e3a796fe4689f43206178ff5b899c71e96ed8 (patch) | |
tree | b925a7c4c1fb2a121dac44a56ab51ffc6c8bb6e1 /mocha_test | |
parent | efc6029e0099001c130060fcd9c93ea83f2d727b (diff) | |
download | async-509e3a796fe4689f43206178ff5b899c71e96ed8.tar.gz |
Short circuit loops completely for some,every,detect when ready [fixes #1293]
Diffstat (limited to 'mocha_test')
-rw-r--r-- | mocha_test/detect.js | 26 | ||||
-rw-r--r-- | mocha_test/some.js | 29 |
2 files changed, 54 insertions, 1 deletions
diff --git a/mocha_test/detect.js b/mocha_test/detect.js index f308485..b1ebf24 100644 --- a/mocha_test/detect.js +++ b/mocha_test/detect.js @@ -1,5 +1,6 @@ var async = require('../lib'); var expect = require('chai').expect; +var _ = require('lodash'); describe("detect", function () { @@ -134,6 +135,31 @@ describe("detect", function () { }); }); + it('detectSeries doesn\'t cause stack overflow (#1293)', function(done) { + var arr = _.range(10000); + let calls = 0; + async.detectSeries(arr, function(data, cb) { + calls += 1; + async.setImmediate(_.partial(cb, null, true)); + }, function(err) { + expect(err).to.equal(null); + expect(calls).to.equal(1); + done(); + }); + }); + + it('detectLimit doesn\'t cause stack overflow (#1293)', function(done) { + var arr = _.range(10000); + let calls = 0; + async.detectLimit(arr, 100, function(data, cb) { + calls += 1; + async.setImmediate(_.partial(cb, null, true)); + }, function(err) { + expect(err).to.equal(null); + expect(calls).to.equal(100); + done(); + }); + }); it('find alias', function(){ expect(async.find).to.equal(async.detect); diff --git a/mocha_test/some.js b/mocha_test/some.js index 0a5a8da..989fecb 100644 --- a/mocha_test/some.js +++ b/mocha_test/some.js @@ -1,5 +1,6 @@ var async = require('../lib'); var expect = require('chai').expect; +var _ = require('lodash'); describe("some", function () { @@ -83,7 +84,6 @@ describe("some", function () { }); }); - it('someLimit short-circuit', function(done){ var calls = 0; async.someLimit([3,1,2], 1, function(x, callback){ @@ -97,6 +97,33 @@ describe("some", function () { }); }); + + it('someSeries doesn\'t cause stack overflow (#1293)', function(done) { + var arr = _.range(10000); + let calls = 0; + async.someSeries(arr, function(data, cb) { + calls += 1; + async.setImmediate(_.partial(cb, null, true)); + }, function(err) { + expect(err).to.equal(null); + expect(calls).to.equal(1); + done(); + }); + }); + + it('someLimit doesn\'t cause stack overflow (#1293)', function(done) { + var arr = _.range(10000); + let calls = 0; + async.someLimit(arr, 100, function(data, cb) { + calls += 1; + async.setImmediate(_.partial(cb, null, true)); + }, function(err) { + expect(err).to.equal(null); + expect(calls).to.equal(100); + done(); + }); + }); + it('any alias', function(){ expect(async.any).to.equal(async.some); }); |