CRG C gate requires: unit, smoke, build, P2P (property-based), E2E, reflexive, contract, aspect, and benchmark tests.
| Category | File | Count | Notes |
|---|---|---|---|
| Unit | test/a2_ml_test.exs |
13 | Parser, renderer, trust levels, attestation |
| Smoke | test/a2_ml_test.exs |
— | Covered by minimal parse/render tests |
| Build | mix compile |
— | CI gate |
| Property/P2P | test/a2ml_property_test.exs |
6 | Determinism, anti-symmetry, round-trips |
| E2E | test/a2_ml_test.exs |
1 | Full parse/render/re-parse roundtrip |
| Reflexive | test/a2ml_property_test.exs |
1 | compare(x,x) == :eq for all levels |
| Contract | test/a2ml_contract_test.exs |
11 | Named invariants (error/ok guarantees) |
| Aspect | test/a2ml_aspect_test.exs |
11 | Security, correctness, performance, resilience |
| Benchmark | test/a2ml_bench_test.exs |
4 | Timing guards (parse/render/roundtrip) |
Total: 48 tests, 0 failures
mix test- Unit: individual function correctness
- Smoke: essential path does not crash
- Build: compilation gate (mix compile)
- Property/P2P: determinism, algebraic laws, invariants over many inputs
- E2E: full parse → render → re-parse pipeline
- Reflexive:
compare(x,x) == :eqidentity laws - Contract: named behavioural invariants (error-tuple guarantee, etc.)
- Aspect: cross-cutting concerns (security input safety, performance bounds, resilience)
- Benchmark: wall-clock regression guards
- Real fuzz harness (the
tests/fuzz/placeholder.txtis a scorecard placeholder only) - Cross-implementation comparison benchmarks vs a2ml-rs and a2ml-deno
- Concurrency stress tests (if GenServer is added)