Rode tudo pelo WSL via tools/mrun. Esta pasta assume MATLAB R2024a no
lado Windows (veja ../tools/mrun e a policy AEGIS do projeto de
vetorizacao FlowSim em
<axon>/my-axon/dev-projects/flowsim-vectorize/_policy.md).
English version:
tests/README.md
tests/
├── README.md # arquivo em ingles
├── LEIAME.md # este arquivo (pt-BR)
├── run_all.m # runner de topo — invoca smoke/*, unit/*, imprime relatorio
├── run_smoke.m # so os testes de smoke (rapido: sanidade de env, class loads)
├── run_unit.m # so os testes de unit (medio: oracle-diffs por funcao)
├── helpers/ # infra de teste — assercoes, oracle-diff, fixtures
│ ├── fs_expect.m # assercao simples (fs_expect(cond, msg))
│ ├── fs_reltol.m # comparador com tolerancia relativa
│ ├── fs_frob.m # diff Frobenius relativo em matrizes sparse/dense
│ ├── fs_setup.m # setup padrao de teste: addpath, seed rng, captura t0
│ ├── fs_teardown.m # cleanup: reporta tempo, restaura rng
│ └── fs_load_mesh.m # carrega uma malha canonica por nome (M8, HermelineQuad_12, ...)
├── smoke/ # rapido (segundos) — sanity checks, sem afirmacoes numericas
│ ├── smoke_env.m # versao MATLAB, cwd WSL, paths configurados
│ ├── smoke_class_hierarchy.m # verifica estado da hierarquia OOP (quais classes carregam)
│ ├── smoke_mesh_load.m # todo .msh em meshes/ carrega e reporta contagens de no/elem
│ └── smoke_startdat.m # Start.dat parseia; reporta numcase, pmethod, phasekey
├── unit/ # medio (10-60 s por teste) — correcao por funcao
│ ├── unit_preprocessormod.m # build de malha produz formas/contagens esperadas
│ ├── unit_lpew2_reference.m # saida baseline do LPEW2 numa malha pequena → captura em golden/
│ ├── unit_assembly_mpfad.m # nnz da montagem MPFA-D, condest, primeiros-5 valores de pressao
│ └── unit_richards_caso439.m # uma iteracao Picard do Caso439 completa + fingerprint numerico
├── golden/ # baseline outputs capturados (commitados; regenerados com --update)
│ └── (populado por testes de unit na primeira rodada)
└── data/ # fixtures pequenas de teste (malhas minusculas, variantes de Start.dat)
└── (vazio ate testes precisarem)
# Harness completo (smoke + unit)
tools/mrun -c $(pwd) tests/run_all.m
# So testes de smoke (rapido, ~1 min total)
tools/mrun -c $(pwd) tests/run_smoke.m
# Um teste especifico
tools/mrun -c $(pwd) tests/smoke/smoke_env.m
# Um teste unit com auto-log
tools/mrun -L -c $(pwd) tests/unit/unit_lpew2_reference.mCada script de teste:
- Chama
fs_setupno comeco (paths, seed rng, timer). - Usa
fs_expect(cond, msg)para assercoes — primeira falha imprime mas continua; sumario final reporta contagem pass/fail. - Termina com
fs_teardownque imprimeTEST OKouTEST FAIL: N failurese sai com 0 ou 1. - Testes unit numericos leem/escrevem baselines em
golden/<nome-do-teste>.mat. Na primeira rodada capturam. Nas rodadas seguintes comparam dentro da tolerancia.
Padrao em fs_frob.m:
- Matriz esparsa Frobenius relativa:
1e-12 - Vetor denso L2 relativo:
1e-10 - Escalar relativo:
1e-10 - Deriva permitida em
condest:10× ratio
Override por-chamada via fs_frob(A, B, tol).
- Sem framework de teste third-party — MATLAB tem
matlab.unittestmas adiciona overhead; para um harness de estudo code-dev, scripts planos +fs_expectsao mais simples e fazem diff limpo sob version control. - Arquivos golden sao
.mat(binario) — deterministicos, pequenos, amigaveis-a-git para escalares mas ignorados para campos grandes via.gitignore(veja proxima secao). - Testes sao roda-veis um-de-cada-vez entao uma unit que falha nao para o batch.
- Sem side-effects fora de
tests/— todo teste cria seu scratch emtests/data/tmp/e limpa emfs_teardown.
Adicionar ao .gitignore:
tests/data/tmp/
tests/golden/*.big.mat # baselines maiores que 100 KB ficam so locais