| 622 | } |
| 623 | |
| 624 | function calculateSpeedStats(results) { |
| 625 | if (!results.length) { |
| 626 | return { min: 'Unavailable', median: 'Unavailable', max: 'Unavailable', avg: 'Unavailable' }; |
| 627 | } |
| 628 | const sorted = [...results].sort((a, b) => a - b); |
| 629 | const sum = sorted.reduce((acc, v) => acc + v, 0); |
| 630 | const avg = sum / sorted.length; |
| 631 | const mid = Math.floor(sorted.length / 2); |
| 632 | const median = sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid]; |
| 633 | return { min: sorted[0], median, max: sorted[sorted.length - 1], avg }; |
| 634 | } |
| 635 | |
| 636 | function buildReliabilityProfile(speedResults, totalQueries) { |
| 637 | if (totalQueries === 0) { |