Verification
Equivalence testing
Every commit is compared against Java FastQC reference output across 18 test cases covering all CLI flag combinations. The report shows text diffs with word highlighting, pixel-level image comparison, and side-by-side SVG previews.
What is tested
fastqc_data.txtandsummary.txtmust be byte-identical after applying known-difference patchesfastqc_report.htmlmust be structurally identical after normalizing embedded images- SVG charts must be structurally identical after normalizing font and rendering differences
- PNG charts are compared pixel-by-pixel with a configurable tolerance (currently 12%)
What is different
Text output is identical. Some non-text outputs differ because the rendering stack is different:
- PNG charts are rendered via resvg + tiny-skia instead of Java2D. Antialiasing differs, producing 1-2% pixel differences.
- SVG charts use a bundled font (Liberation Sans) instead of system Arial, so text positions shift by a few pixels.
- The HTML report is structurally identical once you strip out the embedded chart images (which differ for the same rendering reasons).
None of this affects analysis results. fastqc_data.txt and summary.txt are byte-identical.
CI integration
The comparison runs on every commit and pull request via GitHub Actions. If any strict file differs from reference after patching, the build fails. The HTML report is uploaded as a build artifact on every run (pass or fail) so reviewers can inspect differences visually.
Running locally
cargo build --release
uv run tests/equivalence/compare.py --binary ./target/release/fastqc
Writes the report to tests/equivalence/reports/equivalence_report.html.