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_klf"] == pytest.approx(0.1)
|
||
|
|
assert v["wu_klf"] == pytest.approx(0.7325)
|
||
|
|
assert v["Mu_kipft"] == pytest.approx(23.44)
|
||
|
|
assert v["Vu_kip"] == pytest.approx(5.86)
|
||
|
|
|
||
|
|
|
||
|
|
def test_example_flexure(result):
|
||
|
|
v = result["values"]
|
||
|
|
assert v["a_in"] == 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_kipft"] == 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_in2"] == pytest.approx(0.253333, rel=1e-4)
|
||
|
|
assert v["phiVc_kip"] == pytest.approx(6.244016, rel=1e-4)
|
||
|
|
assert result["checks"]["minimum_steel"]["ok"] is True
|
||
|
|
assert result["checks"]["shear"]["ok"] is True
|