moodmosaic

From Crash To Test

This post is part of the Input Coverage > Code Coverage series.

Keep crashes. Turn them into unit tests. Never regress.

Pattern:

tests/crashes/
  money_unicode_minus.bin
  csv_header_huge.bin

tests/repro.rs:

#[test]
fn crash_money_unicode_minus() {
    let data = include_bytes!("crashes/money_unicode_minus.bin");
    let s = std::str::from_utf8(data).unwrap();
    let _ = money_amounts::parse_money(s);
}

#[test]
fn crash_csv_header_huge() {
    let data = include_bytes!("crashes/csv_header_huge.bin");
    let s = String::from_utf8_lossy(data);
    let rows = csv_import_cli::ingest_rows_unbounded(&s);
    assert!(rows.len() >= 0);
}

Next: Arbitrary Models vs Raw Bytes