Files
EquationMiner/tests/test_cli.py
T

67 lines
3.1 KiB
Python

"""CLI su un CSV sintetico: file prodotti, correzione dei domini a mano, formule del report, codici di uscita."""
import pytest
from conftest import RADICE, scrivi_csv, segnale
from fitseg import cli
def csv_sintetico(tmp_path):
t, serie = segnale()
csv = tmp_path / "sint.csv"
scrivi_csv(csv, t, serie)
return csv
def test_cli_domini_e_analizza(tmp_path, capsys):
csv = csv_sintetico(tmp_path)
base = ["--config", str(RADICE / "config.toml"), "--output", str(tmp_path / "out")]
out = tmp_path / "out/sint"
cli.main([*base, "domini", str(csv)])
assert (out / "01_domini/domini.toml").exists() and (out / "01_domini/domini.png").exists()
assert not (out / "03_report").exists() or not any((out / "03_report").iterdir()) # `domini` non fa nessun fit
cli.main([*base, "analizza", str(csv), "--domini", str(out / "01_domini/domini.toml")]) # domini corretti a mano
for f in ("02_sovrapposizione/sovrapposizione_T_C.png", "02_sovrapposizione/dominio7_T_C.png",
"03_report/report.md", "03_report/risultati.json"):
assert (out / f).exists(), f
report = (out / "03_report/report.md").read_text()
assert "../01_domini/domini.png" in report and "../02_sovrapposizione/dominio7_T_C.png" in report
assert "dominio 7 raffreddamento" in capsys.readouterr().out
# grandezze matematiche in LaTeX, con i dollari bilanciati su ogni riga
for riga in report.splitlines():
assert riga.count("$") % 2 == 0, riga
for formula in (r"$y = c + A\,e^{-t'/\tau}$", r"$t' = t - t_0$", r"$\sigma_\text{rumore}", r"$R^2 = ", r"$\rho_1 = ",
r"$\Delta = +", r"$\Delta\mathrm{AICc}", r"$$ y = "):
assert formula in report, formula
def test_cli_errori(tmp_path):
base = ["--config", str(RADICE / "config.toml"), "--output", str(tmp_path)]
with pytest.raises(SystemExit) as e:
cli.main([*base, "domini", str(tmp_path / "non_esiste.csv")])
assert e.value.code == 4
with pytest.raises(SystemExit) as e:
cli.main(["--config", "/non/esiste.toml", "domini", "x.csv"])
assert e.value.code == 3
def test_cli_domini_non_validi_exit_6(tmp_path):
csv = csv_sintetico(tmp_path)
toml = tmp_path / "d.toml"
toml.write_text('[[dominio]]\ntipo="riposo"\nt0_s=0\nt1_s=10\n[[dominio]]\ntipo="raffreddamento"\nt0_s=20\nt1_s=30\n')
with pytest.raises(SystemExit) as e:
cli.main(["--config", str(RADICE / "config.toml"), "--output", str(tmp_path / "out"), "analizza", str(csv), "--domini", str(toml)])
assert e.value.code == 6
with pytest.raises(SystemExit) as e:
cli.main(["--config", str(RADICE / "config.toml"), "--output", str(tmp_path / "out"), "analizza", str(csv),
"--domini", str(tmp_path / "manca.toml")])
assert e.value.code == 6
def test_cli_csv_non_valido_exit_4(tmp_path):
csv = tmp_path / "vuoto.csv"
csv.write_text("t_ms,T_C,dT_C\n")
with pytest.raises(SystemExit) as e:
cli.main(["--config", str(RADICE / "config.toml"), "--output", str(tmp_path / "out"), "domini", str(csv)])
assert e.value.code == 4