Files
Aislo/resources/tester/test_b08_back_length_standard.py
T

58 lines
2.1 KiB
Python

# -*- coding: utf-8 -*-
"""뒷길이 표준(품셈 13-4-4 [주]⑩) — 안 고른 돌쌓기의 뒷길이는 **표의 하한** (2026-09-14 브레인 판정 ㉮).
앞서 붙박이 45㎝ 로 섰음. 표는 높이 × 메/찰 로 범위를 줌 — 하한이 규격(25·30·35·45·55·60·75)에
없으면 **범위 안 그 위 첫 규격**(메쌓기 ~3m·~5m 하한 36 → 45). 경계값은 앞 칸(표준경사와 같음).
"""
from __future__ import annotations
import sys
from pathlib import Path
import pytest
ROOT = Path(__file__).resolve().parents[2]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from B08_Quantity.B08_Quantity_Engine_UnitQuantity_StoneSpec import ( # noqa: E402
_back_length,
back_length_default_note,
standard_back_length,
)
# (높이, 메쌓기 제안, 찰쌓기 제안) — 원문 L7174~7177
CELLS = [
(1.0, 25, 25),
(1.5, 25, 25), # 경계값은 앞 칸
(2.5, 45, 30), # 메 36~45 → 45 · 찰 30~35 → 30
(3.0, 45, 30),
(4.0, 45, 35), # 메 36~60 → 45 · 찰 35~45 → 35
(6.0, 45, 35), # 메 45~75 · 찰 35~55
(7.5, 75, 45), # 메 75이상 · 찰 45~60
]
@pytest.mark.parametrize("height, dry, wet", CELLS)
def test_표_하한(height: float, dry: int, wet: int) -> None:
assert standard_back_length(wet=False, height_m=height)[0] == dry
assert standard_back_length(wet=True, height_m=height)[0] == wet
def test_하한이_규격에_없으면_그_위_첫_규격_사유() -> None:
cm, basis = standard_back_length(wet=False, height_m=2.5)
assert cm == 45
assert "36~45㎝" in basis and "하한 36㎝ 는 규격 일곱(원문 L7152)에 없어" in basis
assert "원문 L7172~7181" in basis # 사용자가 되짚을 줄 번호(브레인 2026-09-14)
def test_고른_값이_이긴다() -> None:
assert _back_length({"back_len_cm": "55"}, wet=True, height_m=2.5) == 55
assert back_length_default_note({"back_len_cm": 55}, 55, wet=True, height_m=2.5) is None
def test_메찰_높이를_모르는_자리는_종전_45() -> None:
assert _back_length({}) == 45
assert "기본 45㎝" in (back_length_default_note({}, 45) or "")