Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,14 @@ MiniPdf.Web/MiniPdf.Web.Client/wwwroot/fonts/
/tests/Issue_Files/minipdf_xlsx
/tests/Issue_Files/minipdf_pptx
/artifacts/*
!/artifacts/go-benchmark/
/artifacts/go-benchmark/*
!/artifacts/go-benchmark/issue/
/artifacts/go-benchmark/issue/*
!/artifacts/go-benchmark/issue/xlsx/
/artifacts/go-benchmark/issue/xlsx/*
!/artifacts/go-benchmark/issue/xlsx/report/
!/artifacts/go-benchmark/issue/xlsx/report/**
!/artifacts/rust-benchmark/
/artifacts/rust-benchmark/*
!/artifacts/rust-benchmark/benchmark_matrix.json
Expand Down
29 changes: 28 additions & 1 deletion FEATURE_PARITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ All six implementations have language-specific visual benchmark runners under
| Malformed/security fixtures | P | P | I | P | I | B/P |
| Classic XLSX report | I | I | M | M | M | M |
| Classic DOCX report | I | I | M | M | M | M |
| Issue XLSX report | I | I | I | M | M | M |
| Issue XLSX report | I | I | I | I | M | M |
| Issue DOCX report | I | M | M | M | M | M |
| Issue PPTX report | I | M | M | M | M | M |
| Classic PPTX corpus/report | M | M | M | M | M | M |
Expand Down Expand Up @@ -273,6 +273,33 @@ present. Require a focused unit test plus a reproducible visual benchmark case.
overrides raised the five-case classic DOCX average from `0.9872` to `0.9889`;
all cases improved or held. See the local
[`report`](artifacts/go-parity-docx-margins/report/comparison_report.md).
- 2026-09-14: horizontally paginating overflowing single-column XLSX text
raised `classic09_long_text` from `0.1840` with `1/12` pages to `0.8942`
with `12/12` pages. The complete 191-case classic XLSX average increased
from `0.8436` to `0.8473`, with all unrelated case scores unchanged. See the
local [`report`](artifacts/go-benchmark/classic/xlsx/report/comparison_report.md).
- 2026-09-14: preserving explicit XLSX row and cell references raised
`classic11_sparse_rows` from `0.6990` to `0.9996` and
`classic12_sparse_columns` from `0.6993` to `0.9995`, with both candidates
reaching `2/2` reference pages. The complete 191-case average increased from
`0.8473` to `0.8503`, with no case regression.
- 2026-09-14: skipping worksheets with no physical rows while retaining a
fallback page for an entirely empty workbook raised
`classic30_mixed_empty_and_filled_sheets` from `0.6834` with `4/2` pages to
`0.9993` with `2/2` pages. The complete average reached `0.8519`; SHA-256
comparison against the preceding stage showed this was the only changed
candidate among all 191 cases.
- 2026-09-14: mapping OOXML boolean cells from `1` and `0` to Excel-compatible
`TRUE` and `FALSE` raised `classic42_boolean_values` from `0.9264` to
`0.9869`. The complete average reached `0.8522`; SHA-256 comparison against
the preceding stage showed this was the only changed candidate among all 191
cases.
- 2026-09-14: the complete Go issue XLSX benchmark covers all 24 tracked issue
fixtures with 24 successful conversions and no missing Microsoft 365 or
LibreOffice references. The report averages `0.4929` and compares up to three
pages per case because two stress fixtures produce 3,781 and 2,860 candidate
pages. See the tracked
[`report`](artifacts/go-benchmark/issue/xlsx/report/comparison_report.md).

## Alignment Backlog

Expand Down
286 changes: 281 additions & 5 deletions artifacts/go-benchmark/issue/xlsx/report/benchmark_coverage.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,112 @@
"auxiliary_reference_label": "LibreOffice (auxiliary)",
"fixture_scope": "shared-on-disk-fixtures",
"executes_dotnet_xunit": false,
"max_compare_pages": 0,
"selected_cases": 1,
"passed_conversions": 1,
"max_compare_pages": 3,
"selected_cases": 24,
"passed_conversions": 24,
"failed_conversions": 0,
"missing_references": 0,
"missing_auxiliary_references": 0,
"comparison_completed": true,
"comparison_results": 1,
"average_score": 0.4046,
"comparison_results": 24,
"average_score": 0.49293750000000003,
"cases": [
{
"name": "Academic Achievement Summary Table",
"case_id": "Academic Achievement Summary Table",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Academic Achievement Summary Table.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "AcademicAchievement_temp",
"case_id": "AcademicAchievement_temp",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/AcademicAchievement_temp.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Business expense budget1",
"case_id": "Business expense budget1",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Business expense budget1.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Business expenses budget2",
"case_id": "Business expenses budget2",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Business expenses budget2.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Business plan checklist with SWOT analysis1",
"case_id": "Business plan checklist with SWOT analysis1",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Business plan checklist with SWOT analysis1.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Event budget1",
"case_id": "Event budget1",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Event budget1.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Expense report basic1",
"case_id": "Expense report basic1",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Expense report basic1.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Grocery list1",
"case_id": "Grocery list1",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Grocery list1.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Issue202609031340",
"case_id": "Issue202609031340",
Expand All @@ -29,6 +125,186 @@
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "payroll-calculator_f",
"case_id": "payroll-calculator_f",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/payroll-calculator_f.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "PO_anonymized",
"case_id": "PO_anonymized",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/PO_anonymized.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Simple invoice1",
"case_id": "Simple invoice1",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Simple invoice1.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Small business cash flow forecast1",
"case_id": "Small business cash flow forecast1",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Small business cash flow forecast1.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Wedding_timeline_planner1_copy",
"case_id": "Wedding_timeline_planner1_copy",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Wedding_timeline_planner1_copy.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "Weekly schedule planner1",
"case_id": "Weekly schedule planner1",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/Weekly schedule planner1.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "XlsxIssue152_ClusteredNonZeroBarChart",
"case_id": "XlsxIssue152_ClusteredNonZeroBarChart",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/XlsxIssue152_ClusteredNonZeroBarChart.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "XlsxIssue75",
"case_id": "XlsxIssue75",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/XlsxIssue75.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "XlsxIssue77_MergedCellAlignment",
"case_id": "XlsxIssue77_MergedCellAlignment",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/XlsxIssue77_MergedCellAlignment.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "XlsxIssue77_Template1",
"case_id": "XlsxIssue77_Template1",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/XlsxIssue77_Template1.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "XlsxIssue77_Template2_Workaround",
"case_id": "XlsxIssue77_Template2_Workaround",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/XlsxIssue77_Template2_Workaround.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "XlsxIssue81_LayoutOptions",
"case_id": "XlsxIssue81_LayoutOptions",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/XlsxIssue81_LayoutOptions.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "XlsxIssue82_5mb",
"case_id": "XlsxIssue82_5mb",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/XlsxIssue82_5mb.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "XlsxIssue82_SampleTestData5mb",
"case_id": "XlsxIssue82_SampleTestData5mb",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/XlsxIssue82_SampleTestData5mb.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
},
{
"name": "XlsxIssue82_WideTable",
"case_id": "XlsxIssue82_WideTable",
"suite": "issue",
"format": "xlsx",
"source_path": "tests/Issue_Files/xlsx/XlsxIssue82_WideTable.xlsx",
"conversion_status": "passed",
"conversion_exit_code": null,
"candidate_exists": true,
"reference_exists": true,
"auxiliary_reference_exists": true
}
]
}
Loading
Loading