Validation

at-py uses three layers of validation:

  • fast unit tests for parser, formatter, MAT, and client wiring behavior;

  • executable documentation examples for user-facing snippets;

  • runner-backed integration tests for end-to-end workflows through at-runner.

Runner-Backed Corpus

The integration corpus intentionally starts small and reproducible. It should grow by adding complete AT cases with checked parser outputs rather than broad fixture dumps.

Current runner-backed cases:

Case

Runner check

Parser check

KRAKEN Pekeris

ATClient.kraken exits successfully through at-runner.

The generated mode file is parsed with read_modes_bin and checked for non-empty mode count, positive wavenumbers, and receiver/source grid dimensions.

Adding Cases

When adding a validation case:

  • keep the input text small enough to review;

  • check at least one parsed output rather than only process exit status;

  • prefer stable shape, count, and monotonicity assertions over fragile exact floating-point snapshots;

  • mark runner-backed tests with @pytest.mark.integration so local unit runs remain fast.