@badeball/cypress-parallel
Version:
[](https://github.com/badeball/cypress-parallel/actions/workflows/build.yml) [;
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==