"""B09 Q 식 편집이 쓰는 식 — **명세 13장 식 언어**(B08 구조물도 풀이기 한 벌)로 풀고 소수 2자리 사사오입. ⚠ 2026-09-14 브레인 판정 — 식 풀이를 B09 에 두 벌 짜지 않음. 종전 `B09_Estimation_Expression`(파이썬 셈)은 걷어냄. """ from __future__ import annotations from decimal import Decimal from B09_Estimation.B09_Estimation_Edits import evaluate_q def test_실무_Q_식을_명세_13장_언어로_풀고_2자리로_확정한다() -> None: got = evaluate_q( { # 18번 §2.2 — f 는 0.85 로 먼저 확정해 넣음 → 15.708 → 15.71 "a": "3600*0.2*0.7*0.85*0.55/15", # 울진 대흥 제15호표 되메우기 Q 68.04 "b": "3600*0.7*0.9*(1/1.25)*0.75/20", # 콘크리트믹서 Q = 60 / t × q × E = 5.40 "c": "60/4*0.45*0.8", "d": "MAX(12.345, SQRT(100))", } ) assert got == { "a": Decimal("15.71"), "b": Decimal("68.04"), "c": Decimal("5.4"), "d": Decimal("12.35"), } def test_모르는_이름·0_이하는_까닭으로_돌려준다() -> None: got = evaluate_q({"x": "abc+1", "y": "0*5", "z": "1/0"}) assert all(isinstance(value, str) and value for value in got.values()), got