"""㉱ (나) 암 환산계수를 구성비 가중으로 — 2026-09-14 브레인 판정(구성비가 정본 · (가) 뒤 차례). B06 의 암은 한 종류 자리표시(`ripping_rock`)라 토적표 보정량·유토곡선이 리핑암 C 하나로 쌓았음 — 구성비 60/40(리핑·발파)이면 토적표 암 보정량이 217.43㎥ 덜 섬(936be972 실측). ⇒ 계수를 내는 한 곳에서 암 두 칸을 Σ몫×C(시공법)로 · 구성비나 시공법이 비면 종전 값(인계가 막힘 사유를 냄 · 지어낸 계수 안 씀). """ from __future__ import annotations import sys from pathlib import Path import pytest ROOT = Path(__file__).resolve().parents[1].parent if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT)) from common_util.common_util_project_settings import ( # noqa: E402 earthwork_conversion_choices, earthwork_conversion_factors, mixed_conversion_factors, ) MIX = { "rock_class_set": "geochang5", "rock_ratios_pct": {"연암": 60, "보통암": 40}, "rock_methods": {"연암": "ripping", "보통암": "blasting"}, } def test_구성비와_시공법이_서면_암_두_칸이_가중_C() -> None: factors = mixed_conversion_factors(MIX) for kind in ("ripping_rock", "blasting_rock"): assert factors[kind]["compacted"] == pytest.approx(0.6 * 1.15 + 0.4 * 1.30) assert factors["soil"] == earthwork_conversion_factors(MIX)["soil"] def test_고른_계수_위에서_가중() -> None: settings = {**MIX, "conversion_factors_override": {"ripping_rock": {"compacted": 1.0}}} assert mixed_conversion_factors(settings)["ripping_rock"]["compacted"] == pytest.approx( 0.6 * 1.0 + 0.4 * 1.30 ) @pytest.mark.parametrize( "settings", [ {"rock_class_set": "geochang5"}, {**MIX, "rock_methods": {"연암": "ripping"}}, ], ) def test_구성비나_시공법이_비면_종전_값(settings: dict) -> None: assert mixed_conversion_factors(settings) == earthwork_conversion_factors(settings) def test_화면_고른_값_표시는_갈래별_그대로() -> None: assert earthwork_conversion_choices(MIX)["ripping_rock"]["compacted"] == pytest.approx(1.15) def test_토적표_유토곡선_운반표가_같은_함수를_씀() -> None: prebuild = (ROOT / "B06_Section" / "B06_Section_Server_Calc_Prebuild.py").read_text("utf-8") router = (ROOT / "B08_Quantity" / "B08_Quantity_Router_Earthwork.py").read_text("utf-8") assert prebuild.count("mixed_conversion_factors(") == 2 assert "earthwork_conversion_factors(" not in prebuild assert router.count("mixed_conversion_factors(settings)") == 2