/* eslint no-console: "off" */
const log = function (results, measurement, tags) {
console.log(measurement, results, tags);
};
export default function (len = 10000, report = log, performance = window.performance) {
return function (cb, measurement, tags) {
let actual;
return new Array(len)
.fill(true)
.reduce(function (prev, item, i) {
return prev.then(function (ms) {
return new Promise(function (resolve) {
const start = performance.now();
cb().then(function (res) {
actual = res;
resolve(ms + (performance.now() - start));
});
}, Promise.resolve(0))
.then(function (total) {
report({ avg: total / len, total: total, count: len }, measurement, tags);
return actual;
}