calcs/concrete-beam/test_concrete_beam.py
smillmorel 8f91baee41 Use Pint and unit-free variable names in concrete-beam
Convert input parsing to Pint (matching the other calculations), carry
units in the YAML values, and drop unit suffixes from input keys, local
variables, results keys, the Typst sheet, and tests.
2026-09-21 12:44:28 -04:00

46 lines
1.4 KiB
Python

from pathlib import Path
import importlib.util
import pytest
HERE = Path(__file__).resolve().parent
spec = importlib.util.spec_from_file_location("concrete_beam_calc", HERE / "calc.py")
assert spec is not None and spec.loader is not None
calc_module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(calc_module)
compute = calc_module.compute
@pytest.fixture
def result():
import yaml
with (HERE / "input.yaml").open(encoding="utf-8") as handle:
return compute(yaml.safe_load(handle))
def test_example_demands(result):
v = result["values"]
assert v["self_weight"] == pytest.approx(0.1)
assert v["wu"] == pytest.approx(0.7325)
assert v["Mu"] == pytest.approx(23.44)
assert v["Vu"] == pytest.approx(5.86)
def test_example_flexure(result):
v = result["values"]
assert v["a"] == pytest.approx(1.823529, rel=1e-5)
assert v["et"] == pytest.approx(0.010283, rel=1e-3)
assert v["phi"] == pytest.approx(0.9)
assert v["phiMn"] == pytest.approx(23.961176, rel=1e-5)
assert result["checks"]["flexure"]["ok"] is True
def test_example_min_steel_and_shear(result):
v = result["values"]
assert v["As_min"] == pytest.approx(0.253333, rel=1e-4)
assert v["phiVc"] == pytest.approx(6.244016, rel=1e-4)
assert result["checks"]["minimum_steel"]["ok"] is True
assert result["checks"]["shear"]["ok"] is True