From 6fa0b54be04a7fc980219fee7132e7b81f5a4dac Mon Sep 17 00:00:00 2001 From: AnHeuermann <38031952+AnHeuermann@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:33:43 +0100 Subject: [PATCH 1/2] Always add link to CSV --- src/report.jl | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/report.jl b/src/report.jl index 88a12c071..96c85d9bc 100644 --- a/src/report.jl +++ b/src/report.jl @@ -5,10 +5,11 @@ import Printf: @sprintf function _status_cell(ok::Bool, t::Float64, logFile::Union{String,Nothing}) link = isnothing(logFile) ? "" : """ (log)""" + time = t > 0 ? @sprintf("%.2f", t) * " s" : "" if ok - return """✓ $(@sprintf "%.2f" t) s$link""" + return """✓$(time)$(link)""" else - return """✗$link""" + return """✗$(time)$(link)""" end end @@ -18,12 +19,17 @@ function _cmp_cell(r::ModelResult, results_root::String) end n, p = r.cmp_total, r.cmp_pass if p == n - return """✓ $p/$n""" + # No diff CSV when all signals pass — link the sim CSV instead + short = split(r.name, ".")[end] + sim_csv = joinpath("files", r.name, "$(short)_sim.csv") + csv_link = isfile(joinpath(results_root, sim_csv)) ? """ (CSV)""" : "" + return """✓ $p/$n$(csv_link)""" else # Link to the interactive diff HTML (next to the CSV, same name, .html extension) diff_html = replace(r.cmp_csv, r"\.csv$" => ".html") rel = relpath(isfile(diff_html) ? diff_html : r.cmp_csv, results_root) - return """$p/$n""" + csv_link = isempty(r.cmp_csv) ? "" : """ (CSV)""" + return """$p/$n$(csv_link)""" end end From a4cdebee3557a746a70141396109d4865a61cabe Mon Sep 17 00:00:00 2001 From: AnHeuermann <38031952+AnHeuermann@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:40:11 +0100 Subject: [PATCH 2/2] Add times to summary.json --- src/summary.jl | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/summary.jl b/src/summary.jl index d922deca1..7de1e2d54 100644 --- a/src/summary.jl +++ b/src/summary.jl @@ -37,8 +37,11 @@ function write_summary( print(io, " {\"name\":\"$(_esc_json(r.name))\"," * "\"export\":$(r.export_success)," * + "\"export_time\":$(@sprintf "%.3f" r.export_time)," * "\"parse\":$(r.parse_success)," * + "\"parse_time\":$(@sprintf "%.3f" r.parse_time)," * "\"sim\":$(r.sim_success)," * + "\"sim_time\":$(@sprintf "%.3f" r.sim_time)," * "\"cmp_total\":$(r.cmp_total)," * "\"cmp_pass\":$(r.cmp_pass)}$sep\n") end @@ -112,15 +115,18 @@ function load_summary(results_root::String)::Union{RunSummary,Nothing} models = Dict{String,Any}[] for m in eachmatch( - r"\{\"name\":\"([^\"]*)\",\"export\":(true|false),\"parse\":(true|false),\"sim\":(true|false),\"cmp_total\":(\d+),\"cmp_pass\":(\d+)\}", + r"\{\"name\":\"([^\"]*)\",\"export\":(true|false),\"export_time\":([\d.]+),\"parse\":(true|false),\"parse_time\":([\d.]+),\"sim\":(true|false),\"sim_time\":([\d.]+),\"cmp_total\":(\d+),\"cmp_pass\":(\d+)\}", txt) push!(models, Dict{String,Any}( - "name" => string(m.captures[1]), - "export" => m.captures[2] == "true", - "parse" => m.captures[3] == "true", - "sim" => m.captures[4] == "true", - "cmp_total" => parse(Int, m.captures[5]), - "cmp_pass" => parse(Int, m.captures[6]), + "name" => string(m.captures[1]), + "export" => m.captures[2] == "true", + "export_time" => parse(Float64, m.captures[3]), + "parse" => m.captures[4] == "true", + "parse_time" => parse(Float64, m.captures[5]), + "sim" => m.captures[6] == "true", + "sim_time" => parse(Float64, m.captures[7]), + "cmp_total" => parse(Int, m.captures[8]), + "cmp_pass" => parse(Int, m.captures[9]), )) end return RunSummary(