Generate report for comparison tests with multiple variants
(self, target: str)
| 127 | return report |
| 128 | |
| 129 | def _generate_comparison_report(self, target: str) -> str: |
| 130 | """Generate report for comparison tests with multiple variants""" |
| 131 | report = f""" |
| 132 | # Performance Comparison: {target} |
| 133 | |
| 134 | """ |
| 135 | |
| 136 | # Compute statistics for each variant |
| 137 | variant_stats: dict[str, dict[str, float]] = {} |
| 138 | for variant_name, variant_results in self.variants.items(): |
| 139 | variant_stats[variant_name] = self.compute_statistics(variant_results) |
| 140 | |
| 141 | # Display table for each variant |
| 142 | report += "## Variant Performance\n\n" |
| 143 | for variant_name in sorted(self.variants.keys()): |
| 144 | stats = variant_stats[variant_name] |
| 145 | report += f"### {variant_name} ({stats['count']} iterations)\n\n" |
| 146 | report += "| Metric | Value |\n" |
| 147 | report += "|--------|-------|\n" |
| 148 | report += f"| **Best** | {stats['best']:.2f} ns/call |\n" |
| 149 | report += f"| **Median** | {stats['median']:.2f} ns/call |\n" |
| 150 | report += f"| **Worst** | {stats['worst']:.2f} ns/call |\n" |
| 151 | report += f"| **StdDev** | {stats['stdev']:.2f} ns |\n" |
| 152 | report += f"| **Calls/sec** | {1e9 / stats['median']:.0f} |\n\n" |
| 153 | |
| 154 | # Comparison analysis |
| 155 | report += "## Comparison\n\n" |
| 156 | |
| 157 | # Find fastest and slowest |
| 158 | sorted_variants = sorted(variant_stats.items(), key=lambda x: x[1]["median"]) |
| 159 | fastest = sorted_variants[0] |
| 160 | slowest = sorted_variants[-1] |
| 161 | |
| 162 | report += f"**Fastest**: {fastest[0]} ({fastest[1]['median']:.2f} ns/call)\n\n" |
| 163 | report += f"**Slowest**: {slowest[0]} ({slowest[1]['median']:.2f} ns/call)\n\n" |
| 164 | |
| 165 | if len(sorted_variants) >= 2: |
| 166 | speedup = slowest[1]["median"] / fastest[1]["median"] |
| 167 | report += ( |
| 168 | f"**Speedup**: {speedup:.2f}x faster ({fastest[0]} vs {slowest[0]})\n\n" |
| 169 | ) |
| 170 | |
| 171 | # Relative performance table |
| 172 | report += "| Variant | Median (ns) | Relative | Speedup |\n" |
| 173 | report += "|---------|-------------|----------|----------|\n" |
| 174 | baseline_median = fastest[1]["median"] |
| 175 | for variant_name, stats in sorted_variants: |
| 176 | relative = stats["median"] / baseline_median |
| 177 | speedup = baseline_median / stats["median"] |
| 178 | if relative == 1.0: |
| 179 | report += f"| **{variant_name}** | {stats['median']:.2f} | 1.00x (baseline) | - |\n" |
| 180 | else: |
| 181 | report += f"| {variant_name} | {stats['median']:.2f} | {relative:.2f}x | {speedup:.2f}x |\n" |
| 182 | |
| 183 | return report |
| 184 | |
| 185 | def export_for_ai(self) -> dict[str, Any]: |
| 186 | """Export structured data for AI consumption""" |
no test coverage detected