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.

View the latest equivalence report

What is tested

What is different

Text output is identical. Some non-text outputs differ because the rendering stack is different:

None of this affects analysis results. fastqc_data.txt and summary.txt are byte-identical for FASTQ input, with one deliberate exception for BAM/SAM: quality encoding is taken from the format specification (always Phred+33) instead of inferred from the data, so datasets with no base below Q31 report correct quality scores where Java FastQC misdetects Illumina 1.5 and reports them 31 too low (#6). Reported upstream as s-andrews/FastQC#209 with a matching Java fix submitted in #210; if that merges, the two versions agree again.

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.