UNPKG

futoin-asyncsteps

Version:

Mimic traditional threads in single threaded event loop

150 lines (146 loc) 4.48 kB
'use strict'; 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