refactor(cli): modularize CLI — extract parser, runner, report and main logic into dedicated files

This commit is contained in:
Sergey Penkovsky
2025-08-06 22:19:13 +03:00
parent 3ce21f55e4
commit 09ed186544
8 changed files with 318 additions and 291 deletions

View File

@@ -0,0 +1,21 @@
import 'report_generator.dart';
class CsvReport extends ReportGenerator {
@override
final List<String> keys = [
'benchmark','chainCount','nestingDepth','mean_us','median_us','stddev_us',
'min_us','max_us','trials','timings_us','memory_diff_kb','delta_peak_kb','peak_rss_kb'
];
@override
String render(List<Map<String, dynamic>> rows) {
final header = keys.join(',');
final lines = rows.map((r) =>
keys.map((k) {
final v = r[k];
if (v is List) return '"${v.join(';')}"';
return (v ?? '').toString();
}).join(',')
).toList();
return ([header] + lines).join('\n');
}
}

View File

@@ -0,0 +1,10 @@
import 'report_generator.dart';
class JsonReport extends ReportGenerator {
@override
List<String> get keys => [];
@override
String render(List<Map<String, dynamic>> rows) {
return '[\n${rows.map((r) => ' $r').join(',\n')}\n]';
}
}

View File

@@ -0,0 +1,15 @@
import 'report_generator.dart';
class PrettyReport extends ReportGenerator {
@override
final List<String> keys = [
'benchmark','chainCount','nestingDepth','mean_us','median_us','stddev_us',
'min_us','max_us','trials','memory_diff_kb','delta_peak_kb','peak_rss_kb'
];
@override
String render(List<Map<String, dynamic>> rows) {
final header = keys.join('\t');
final lines = rows.map((r) => keys.map((k) => (r[k] ?? '').toString()).join('\t')).toList();
return ([header] + lines).join('\n');
}
}

View File

@@ -0,0 +1,4 @@
abstract class ReportGenerator {
String render(List<Map<String, dynamic>> results);
List<String> get keys;
}