"""B08 3탭 토적표 — 옛 엔진 복사본의 고친 곳만 (PLAN 61-3). 계산식은 옛 시험(test_b08_earthwork_table.py · 경로만 새 엔진으로)이 잼. 여기서는 ① 암 종류가 없으면 암 지반 유형 · ② 줄의 `cut_rock_kind` · ③ 합계의 리핑암 · 발파암 칸. """ from __future__ import annotations import sys from pathlib import Path import pytest ROOT = Path(__file__).resolve().parents[2] sys.path.insert(0, str(ROOT)) from B08_Quantity.B08_Quantity_Engine_Earthwork import ( # noqa: E402 StationArea, build_table, ) FACTORS = { "soil": {"compacted": 0.9}, "ripping_rock": {"compacted": 1.15}, "blasting_rock": {"compacted": 1.3}, } def test_암_종류는_설계값_없으면_지반유형() -> None: old = StationArea.from_design(0, {"cut_rock_area_m2": 2.0, "ground_type": "blasting_rock"}) assert old.cut_rock_kind == "blasting_rock" soil = StationArea.from_design(0, {"ground_type": "soil"}) assert soil.cut_rock_kind is None now = StationArea.from_design( 0, {"ground_type": "blasting_rock", "cut_rock_kind": "ripping_rock"} ) assert now.cut_rock_kind == "ripping_rock" def test_암_칸은_갈래별_합계() -> None: stations = [ StationArea(chainage_m=0, cut_rock_area_m2=2.0, cut_rock_kind="ripping_rock"), StationArea(chainage_m=20, cut_rock_area_m2=4.0, cut_rock_kind="ripping_rock"), StationArea(chainage_m=40, cut_rock_area_m2=6.0, cut_rock_kind="blasting_rock"), ] table = build_table(stations, FACTORS) kinds = [row["cut_rock_kind"] for row in table["rows"]] assert kinds == ["ripping_rock", "ripping_rock", "blasting_rock"] t = table["totals"] # 0~20: (2+4)/2×20 = 60 리핑 · 20~40: (4+6)/2×20 = 100 발파(현 측점 갈래 — 옛 엔진 규칙) assert t["cut_ripping_rock_volume_m3"] == pytest.approx(60) assert t["cut_blasting_rock_volume_m3"] == pytest.approx(100) assert t["cut_ripping_rock_adjusted_m3"] == pytest.approx(60 * 1.15) assert t["cut_blasting_rock_adjusted_m3"] == pytest.approx(100 * 1.3) assert t["cut_rock_volume_m3"] == pytest.approx(160)