futoin-asyncsteps
Version:
Mimic traditional threads in single threaded event loop
150 lines (146 loc) • 4.48 kB
JavaScript
;
var $as = require('../lib/main-full');
var optihelp = require('@futoin/optihelp');
var _require = require('../lib/common'),
THROTTLE = _require.THROTTLE;
//---
var test_array = [];
var test_object = {};
var test_map = new Map();
for (var i = 1000; i > 0; --i) {
test_array.push(i);
test_object["key_".concat(i)] = i;
test_map.set("key_".concat(i), i);
}
//---
var Mutex = $as.Mutex,
Limiter = $as.Limiter,
Throttle = $as.Throttle;
var mtx = new Mutex();
var trtl = new Throttle(1);
var lmtr = new Limiter();
optihelp('AsyncSteps', {
test_time: 5
}).test('Add step', function () {
$as().add(function (as) {});
}).test('Add step with error handler', function () {
$as().add(function (as) {}, function (as, err) {});
}).test('Simple execute', function () {
$as().add(function (as) {}).execute();
}).test('Simple error handling', function () {
$as().add(function (as) {
return as.error('SomeError', 'SomeInfo');
}).execute();
}).test('Inner add step', function (done) {
$as().add(function (as) {
as.add(function (as) {});
}).add(function (as) {
return done();
}).execute();
}).test('successStep', function (done) {
$as().successStep().add(function (as) {
return done();
}).execute();
}).test('Inner successStep', function (done) {
$as().add(function (as) {
return as.successStep();
}).add(function (as) {
return done();
}).execute();
}).test('Parallel', function (done) {
var as = $as();
var p = as.parallel();
p.add(function (as) {});
p.add(function (as) {});
as.add(function (as) {
return done();
});
as.execute();
}).test('Simple error recovery', function (done) {
$as().add(function (as) {
return as.error('SomeError', 'SomeInfo');
}, function (as, err) {
return as.success();
}).add(function (as) {
return done();
}).execute();
}).test('Complex error recovery', function (done) {
$as().add(function (as) {
as.add(function (as) {
return as.add(function (as) {
return as.error('SomeError', 'SomeInfo');
});
});
}, function (as, err) {
return as.success();
}).add(function (as) {
return done();
}).execute();
}).test('Simple cancel', function () {
$as().add(function (as) {}).add(function (as) {}).execute().cancel();
}).test('Single repeat loop', function (done) {
$as().repeat(1, function (as, i) {}).add(function (as) {
return done();
}).execute();
}).test('1000 repeat loop', function (done) {
$as().repeat(1000, function (as, i) {}).add(function (as) {
return done();
}).execute();
}).test('forEach Array', function (done) {
$as().forEach(test_array, function (as, k, v) {}).add(function (as) {
return done();
}).execute();
}).test('forEach Object', function (done) {
$as().forEach(test_object, function (as, k, v) {}).add(function (as) {
return done();
}).execute();
}).test('forEach Map', function (done) {
$as().forEach(test_map, function (as, k, v) {}).add(function (as) {
return done();
}).execute();
}).test('await resolved', function (done) {
$as()["await"](Promise.resolve(true)).add(function (as) {
return done();
}).execute();
}).test('await rejected', function (done) {
$as()["await"](Promise.reject('Fail'), function (as, err) {
return as.success();
}).add(function (as) {
return done();
}).execute();
}).test('await deferred', function (done) {
$as()["await"](new Promise(function (resolve, _) {
return resolve(true);
})).add(function (as) {
return done();
}).execute();
}).test('sync Mutex', function (done) {
$as().sync(mtx, function (as) {}).add(function (as) {
return done();
}).execute();
}).test('sync Mutex blocking', function (done) {
$as().sync(mtx, function (as) {
$as().sync(mtx, function (as) {}).add(function (as) {
return done();
}).execute();
}).execute();
}).test('sync Throttle', function (done) {
trtl._resetPeriod();
$as().sync(trtl, function (as) {}).add(function (as) {
return done();
}).execute();
}).test('sync Throttle blocking', function (done) {
trtl._resetPeriod();
$as().sync(trtl, function (as) {
$as().sync(trtl, function (as) {}).add(function (as) {
return done();
}).execute();
trtl._resetPeriod();
}).execute();
}).test('sync Limiter', function (done) {
lmtr._throttle._resetPeriod();
$as().sync(lmtr, function (as) {}).add(function (as) {
return done();
}).execute();
}).start();
//# sourceMappingURL=optihelp.js.map