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.
46 lines
1.4 KiB
Python
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
|