'use strict'; function printGrid(colHeaders, rows, getValue, unit, note) { const labelWidth = Math.max( ...rows.map(function (r) { return r[0].length; }) ); const suffix = unit ? ' ' + unit : ''; const fmtVal = function (v) { return (v.toFixed(1) + suffix).padStart(10 + suffix.length); }; const fmtPct = function (v) { return ((v >= 0 ? '+' : '') + v.toFixed(1) + '%').padStart(8); }; const fmtFactor = function (va, vb) { return ((vb / va).toFixed(2) + 'x').padStart(7); }; const colWidth = 10 + suffix.length; const header = ''.padEnd(labelWidth) + ' ' + colHeaders .map(function (h) { return h.padStart(colWidth); }) .join(' ') + ' Delta Factor'; console.log(' ' + header); console.log(' ' + '-'.repeat(header.length)); for (const [label, a, b] of rows) { const va = getValue(a); const vb = getValue(b); const pct = ((vb - va) / va) * 100; console.log( ' ' + label.padEnd(labelWidth) + ' ' + fmtVal(va) + ' ' + fmtVal(vb) + ' ' + fmtPct(pct) + ' ' + fmtFactor(va, vb) ); } if (note) { console.log(' (%s)', note); } } module.exports = {printGrid};