From c15c9c2268a42810ffdefc898fec13badd3f8823 Mon Sep 17 00:00:00 2001 From: kisernl Date: Fri, 3 Apr 2026 13:00:16 -0500 Subject: [PATCH] fix: show "--" instead of "0.00s" for time metrics when all iterations fail --- src/sandbox/generate-svg.ts | 17 +++++++++++------ src/sandbox/table.ts | 7 ++++--- src/storage/generate-svg.ts | 17 +++++++++++------ src/update-readme.ts | 6 +++++- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/sandbox/generate-svg.ts b/src/sandbox/generate-svg.ts index 9740b3d..faf883b 100644 --- a/src/sandbox/generate-svg.ts +++ b/src/sandbox/generate-svg.ts @@ -266,12 +266,13 @@ ${sponsorImages.length > 0 ? (() => { const total = r.iterations.length; const rank = i + 1; const medianMs = r.summary.ttiMs.median; + const allFailed = ok === 0; const score = r.compositeScore !== undefined ? r.compositeScore.toFixed(1) : '--'; // Color code based on speed - let speedClass = 'fast'; - if (medianMs > 2000) speedClass = 'slow'; - else if (medianMs > 1000) speedClass = 'medium'; + let speedClass = allFailed ? 'slow' : 'fast'; + if (!allFailed && medianMs > 2000) speedClass = 'slow'; + else if (!allFailed && medianMs > 1000) speedClass = 'medium'; // Rank styling let rankClass = 'rank'; @@ -279,14 +280,18 @@ ${sponsorImages.length > 0 ? (() => { else if (rank === 2) rankClass = 'rank rank-2'; else if (rank === 3) rankClass = 'rank rank-3'; + const medianDisplay = allFailed ? '--' : formatSeconds(medianMs); + const p95Display = allFailed ? '--' : formatSeconds(r.summary.ttiMs.p95); + const p99Display = allFailed ? '--' : formatSeconds(r.summary.ttiMs.p99); + svg += ` ${rank} ${formatProviderName(r.provider)} ${score} - ${formatSeconds(medianMs)} - ${formatSeconds(r.summary.ttiMs.p95)} - ${formatSeconds(r.summary.ttiMs.p99)} + ${medianDisplay} + ${p95Display} + ${p99Display} ${ok}/${total} `; diff --git a/src/sandbox/table.ts b/src/sandbox/table.ts index ecf72ae..83dab02 100644 --- a/src/sandbox/table.ts +++ b/src/sandbox/table.ts @@ -62,12 +62,13 @@ export function printResultsTable(results: BenchmarkResult[]): void { ? result.compositeScore.toFixed(1) : '--'; + const allFailed = successful === 0; console.log([ pad(result.provider, nameWidth), pad(score, 8), - pad(formatSeconds(result.summary.ttiMs.median), colWidth), - pad(formatSeconds(result.summary.ttiMs.p95), colWidth), - pad(formatSeconds(result.summary.ttiMs.p99), colWidth), + pad(allFailed ? '--' : formatSeconds(result.summary.ttiMs.median), colWidth), + pad(allFailed ? '--' : formatSeconds(result.summary.ttiMs.p95), colWidth), + pad(allFailed ? '--' : formatSeconds(result.summary.ttiMs.p99), colWidth), pad(`${successful}/${total} OK`, 10), ].join(' | ')); } diff --git a/src/storage/generate-svg.ts b/src/storage/generate-svg.ts index 46423b3..e462066 100644 --- a/src/storage/generate-svg.ts +++ b/src/storage/generate-svg.ts @@ -184,12 +184,13 @@ ${sponsorImages.length > 0 ? (() => { const total = r.iterations.length; const rank = i + 1; const downloadMs = r.summary.downloadMs.median; + const allFailed = ok === 0; const score = r.compositeScore !== undefined ? r.compositeScore.toFixed(1) : '--'; // Color code based on download speed - let speedClass = 'fast'; - if (downloadMs > 5000) speedClass = 'slow'; - else if (downloadMs > 2000) speedClass = 'medium'; + let speedClass = allFailed ? 'slow' : 'fast'; + if (!allFailed && downloadMs > 5000) speedClass = 'slow'; + else if (!allFailed && downloadMs > 2000) speedClass = 'medium'; // Rank styling let rankClass = 'rank'; @@ -197,14 +198,18 @@ ${sponsorImages.length > 0 ? (() => { else if (rank === 2) rankClass = 'rank rank-2'; else if (rank === 3) rankClass = 'rank rank-3'; + const downloadDisplay = allFailed ? '--' : formatSeconds(downloadMs); + const throughputDisplay = allFailed ? '--' : formatMbps(r.summary.throughputMbps.median); + const uploadDisplay = allFailed ? '--' : formatSeconds(r.summary.uploadMs.median); + svg += ` ${rank} ${formatProviderName(r.provider)} ${score} - ${formatSeconds(downloadMs)} - ${formatMbps(r.summary.throughputMbps.median)} - ${formatSeconds(r.summary.uploadMs.median)} + ${downloadDisplay} + ${throughputDisplay} + ${uploadDisplay} ${ok}/${total} `; diff --git a/src/update-readme.ts b/src/update-readme.ts index 8c904d5..33149a1 100644 --- a/src/update-readme.ts +++ b/src/update-readme.ts @@ -69,9 +69,13 @@ function buildTable(results: BenchmarkResult[]): string { } else { const ok = r.iterations.filter(i => !i.error).length; const total = r.iterations.length; + const allFailed = ok === 0; const score = r.compositeScore !== undefined ? r.compositeScore.toFixed(1) : '--'; + const median = allFailed ? '--' : formatSeconds(r.summary.ttiMs.median); + const p95 = allFailed ? '--' : formatSeconds(r.summary.ttiMs.p95); + const p99 = allFailed ? '--' : formatSeconds(r.summary.ttiMs.p99); lines.push( - `${capitalize(r.provider)}${score}${formatSeconds(r.summary.ttiMs.median)}${formatSeconds(r.summary.ttiMs.p95)}${formatSeconds(r.summary.ttiMs.p99)}${ok}/${total}` + `${capitalize(r.provider)}${score}${median}${p95}${p99}${ok}/${total}` ); } }