nodejs-p-limit/test.js

38 lines
802 B
JavaScript
Raw Normal View History

2020-08-31 20:06:00 +08:00
import test from 'ava';
import delay from 'delay';
import inRange from 'in-range';
import timeSpan from 'time-span';
import randomInt from 'random-int';
import m from './';
test('concurrency: 1', async t => {
const input = [
[10, 300],
[20, 200],
[30, 100]
];
const end = timeSpan();
const limit = m(1);
const mapper = ([val, ms]) => limit(() => delay(ms).then(() => val));
t.deepEqual(await Promise.all(input.map(mapper)), [10, 20, 30]);
t.true(inRange(end(), 590, 650));
});
test('concurrency: 4', async t => {
const concurrency = 5;
let running = 0;
const limit = m(concurrency);
const input = Array(100).fill(0).map(() => limit(async () => {
running++;
t.true(running <= concurrency);
await delay(randomInt(30, 200));
running--;
}));
await Promise.all(input);
});