CelerisLab/docs/tests_overview.md
Frank14f 987566c0e6 feat(body): runtime body add/remove, unified action/obs, FRC_REGION flag
- Add runtime body topology sync (add_body/remove_body + sync_bodies)
  with recompile, DDF patch (feq + BFS inward fill), and commit.
- Unify action/obs flow: set_body/set_force are now host-only;
  run() auto-uploads action and downloads obs via CUDA stream.
- Add read_body(id) -> BodyTelemetry and read_bodies() for DRL loops.
- Add FRC_REGION flag (0x0800) for force_region cells.
- Extract equilibrium helpers (lbm/equilibrium.py) and DDF patch module
  (body/ddf_patch.py).
- Merge recompile / _runtime_recompile into single _recompile().
- Add n_objects to checkpoint; validate on load.
- Add test suite: 40 unit + 19 integration tests (59 total).
- Add conftest.py and docs/tests_overview.md for test documentation.
- Update README.md and CONFIG.md for new API.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-20 18:17:07 +08:00

2.4 KiB

Test Suite Overview

Test hierarchy

Three tiers:

  • tests/unit/ — pure Python, no GPU. Covers isolated logic (pending edits, sync plan construction, flag masks, equilibrium helpers).
  • tests/integration/ — requires GPU. Covers the full body topology sync pipeline (recompile, DDF patch, unified obs/act) and stream API.
  • tests/validation/ — requires GPU, long-running (hours). Physics regression against Kan99b, Sah04, and sensor accuracy references.

Running tests

conda run -n pycuda_3_10 python -m pytest <test_path> -v
What you want to verify Command
Body module logic after refactor pytest tests/unit/ -v
sync_bodies pipeline (no DDF patch) pytest tests/integration/test_sync_bodies_skeleton.py -v
DDF patch after add/remove pytest tests/integration/test_ddf_patch.py -v
Unified action/obs + stream API pytest tests/integration/test_unified_obs.py -v
Full body add/remove e2e pytest tests/integration/test_body_sync_e2e.py -v
All integration tests pytest tests/integration/ -v
All tests (unit + integration) pytest tests/unit/ tests/integration/ -v
Physics regression python tests/validation/run_kan99b_rotating_cylinder.py

Per-file coverage

File GPU Tests What it covers
test_pending_edits.py No 14 stage_add / stage_remove / has_pending_edit / clear_pending_edits lifecycle
test_sync_plan.py No 16 build_flags_for, build_compact_lists_for, build_next_objects, build_sync_plan, commit_pending
test_body_flags.py No 6 FRC_REGION / SENSOR_FLAG / OBSTACLE bits for each body type
test_equilibrium.py No 4 compute_feq_d2q9 and compute_macro_from_ddf numerical correctness
test_sync_bodies_skeleton.py Yes 7 sync_bodies flow: recompile, esopull guard, step count preservation, pending discard
test_ddf_patch.py Yes 5 DDF patch after add/remove: finite forces, released region is fluid
test_unified_obs.py Yes 5 host-only set_body, auto transfer, stream API, DRL loop pattern
test_body_sync_e2e.py Yes 2 Full add -> remove -> checkpoint -> load -> run cycle

Notes

  • pycuda.autoinit is required for all integration tests (selects GPU 0 by default; set CUDA_VISIBLE_DEVICES to change).
  • The curved boundary kernel produces NaN in obstacle-adjacent fluid cells over long runs; DDF patch tests use 50-step verification windows.