phibble

CSV reading

Verification

Scope

Column names, guessed and declared types, values, factor levels, and parsing problems for 39 CSV files, read by each of three CSV readers. CSV text written by toCsv() and CsvWriter::formatDouble().

References

Reference
readr 2.2.0 read_delim(), problems(), and format_csv(), on R 4.6.1
Versions
R 4.6.1, readr 2.2.0, vroom 1.7.1, jsonlite 2.0.0, phit 0.4.4

Data

CSV cases
35 CSV files and the readr options for each Source
readr results
One JSON file per case, written by tests/r/io.R Source

Method

tests/r/io.R reads each case with readr::read_delim() and records names, types, values, and problems; write cases add readr::format_csv() output. tests/IoTest.php reads the same files with identical options. Fixtures regenerated with the listed R versions on 2026-11-01; output byte-identical to the committed files.

Check
Comparison with a reference implementation
Recorded
2026-11-02, PHP 8.5.10, macOS 27.0.1 (arm64), commit 1abdeb1

Tolerances

exact equality

Applies to: Names, types, levels, values, and problem rows

Doubles parsed from readr's shortest round-trip text, NA in identical positions

exact equality

Applies to: Written CSV text

Byte for byte

x: package value; r: reference value.

Results

119 comparisons in 41 cases: 119 pass, 0 fail, 0 skipped.

By case

Results by case
Case Comparisons Status
guess 3 pass
na 3 pass
quoting 3 pass
trim 3 pass
comment 3 pass
skip_nmax 3 pass
nocolnames 3 pass
colnames_given 3 pass
dupnames 3 pass
dupnames_universal 3 pass
coltypes 3 pass
coltypes_named 3 pass
guessmax 3 pass
trim_false 3 pass
empty_rows 3 pass
ragged 3 pass
semicolon 3 pass
select 3 pass
write 3 pass
blank_quoted_empty 3 pass
blank_quoted_empty_only 3 pass
blank_whitespace_line 3 pass
blank_whitespace_kept 3 pass
blank_tab_line 3 pass
blank_unterminated 3 pass
blank_whitespace_file 3 pass
blank_whitespace_delimiter 3 pass
blank_quoted_space 3 pass
blank_cr_line 3 pass
blank_leading_comment 3 pass
blank_comment_after_row 3 pass
quotes_stray 3 pass
quotes_problems 3 pass
quotes_unterminated 3 pass
quotes_escape_double_off 3 pass
problem_rows_skip_comment 3 pass
ragged_trim 3 pass
ragged_space 3 pass
ragged_tab 3 pass
writes CSV like readr 1 pass
formats doubles like write_csv 1 pass
All 119 comparisons
Every comparison
Case Implementation Quantity Criterion Status
guess PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
na PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
quoting PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
trim PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
comment PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
skip_nmax PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
nocolnames PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
colnames_given PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
dupnames PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
dupnames_universal PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
coltypes PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
coltypes_named PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
guessmax PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
trim_false PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
empty_rows PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
ragged PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
semicolon PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
select PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
write PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_quoted_empty PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_quoted_empty_only PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_whitespace_line PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_whitespace_kept PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_tab_line PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_unterminated PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_whitespace_file PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_whitespace_delimiter PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_quoted_space PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_cr_line PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_leading_comment PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
blank_comment_after_row PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
quotes_stray PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
quotes_problems PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
quotes_unterminated PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
quotes_escape_double_off PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
problem_rows_skip_comment PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
ragged_trim PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
ragged_space PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
ragged_tab PHP reader read exact equality pass
phit reader, emulated in PHP read exact equality pass
phit reader read exact equality pass
writes CSV like readr write exact equality pass
formats doubles like write_csv write exact equality pass

Limitations

Known differences

  • Whole-number columns guess as int; readr guesses double. These columns are compared as doubles.
  • empty_rows: readr numbers an empty line's problem one lower than other rows. Problem row numbers are not compared for this case.

Reproduction

From the repository root
Rscript tests/r/io.R
php vendor/bin/pest tests/IoTest.php
Raw record
site/verifications/csv-readr.json
Input data
tests/fixtures/io