UNPKG

@badeball/cypress-parallel

Version:

[![Build status](https://github.com/badeball/cypress-parallel/actions/workflows/build.yml/badge.svg)](https://github.com/badeball/cypress-parallel/actions/workflows/build.yml) [![Npm package weekly downloads](https://badgen.net/npm/dw/@badeball/cypress-pa

53 lines 4.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.estimate = void 0; const distribute_1 = require("./distribute"); const utils_1 = require("./utils"); function zip(collection) { if (collection.length === 0) { return [[], []]; } const [[firstA, firstB], ...rest] = collection; return rest.reduce(([colA, colB], [a, b]) => { return [ [...colA, a], [...colB, b], ]; }, [[firstA], [firstB]]); } function sum(collection) { return collection.reduce((sum, n) => sum + n, 0); } function estimate(weighedFiles, unweighedFiles, nodeCount) { if (weighedFiles.length === 0) { return (0, distribute_1.distribute)(weighedFiles, unweighedFiles, nodeCount); } const averageTimePerLine = zip(weighedFiles.map((testFile) => [ testFile.weight, testFile.content.split("\n").length, ])) .map((collection) => sum(collection)) .reduce((totalTime, totalLines) => totalTime / totalLines); const estimatedFiles = unweighedFiles.map((unweighedFile) => { const estimatedWeight = unweighedFile.content.split("\n").length * averageTimePerLine; return Object.assign(Object.assign({}, unweighedFile), { weight: estimatedWeight }); }); const allFiles = [...weighedFiles, ...estimatedFiles].sort((a, b) => { if (a.weight === b.weight) { return (0, utils_1.compare)(a.file, b.file); } else { return (0, utils_1.compare)(b.weight, a.weight); } }); const schedule = Array.from({ length: nodeCount }, () => { return []; }); for (const file of allFiles) { const leastAssignedNode = schedule.sort((a, b) => (0, utils_1.weightOfSchedule)(a) - (0, utils_1.weightOfSchedule)(b))[0]; leastAssignedNode.push(file); } return schedule; } exports.estimate = estimate; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXN0aW1hdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlc3RpbWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw2Q0FBMEM7QUFFMUMsbUNBQW9EO0FBRXBELFNBQVMsR0FBRyxDQUFPLFVBQW9CO0lBQ3JDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDM0IsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNqQjtJQUVELE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztJQUUvQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQ2hCLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUN2QixPQUFPO1lBQ0wsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7WUFDWixDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNiLENBQUM7SUFDSixDQUFDLEVBQ0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBQyxVQUFvQjtJQUMvQixPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFnQixRQUFRLENBQ3RCLFlBQTJCLEVBQzNCLGNBQStCLEVBQy9CLFNBQWlCO0lBRWpCLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0IsT0FBTyxJQUFBLHVCQUFVLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztLQUM1RDtJQUVELE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUM1QixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUM3QixRQUFRLENBQUMsTUFBTTtRQUNmLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU07S0FDcEMsQ0FBQyxDQUNIO1NBQ0UsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDcEMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBRTdELE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtRQUMxRCxNQUFNLGVBQWUsR0FDbkIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDO1FBRWhFLHVDQUNLLGFBQWEsS0FDaEIsTUFBTSxFQUFFLGVBQWUsSUFDdkI7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEUsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDekIsT0FBTyxJQUFBLGVBQU8sRUFBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQzthQUFNO1lBQ0wsT0FBTyxJQUFBLGVBQU8sRUFBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNwQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQW9CLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQ3ZFLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUM7SUFFSCxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRTtRQUMzQixNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQ3JDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSx3QkFBZ0IsRUFBQyxDQUFDLENBQUMsR0FBRyxJQUFBLHdCQUFnQixFQUFDLENBQUMsQ0FBQyxDQUNwRCxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRUwsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQWpERCw0QkFpREMifQ==