- 로직 화면 바의 새로 만들기 단추가 모달을 엶 · 저장·본떠 저장 뒤 새 자체 로직을 흐름 그림으로 바로 엶 - UI_Test* 다섯 파일 삭제 · 왼쪽 「테스트」 줄 제거 · 모달의 까닭 글은 UI_Logic_Text 것을 씀 - 견본 10개 키 목록은 시험(test_m01_test_container)으로 옮김 · 흐름 그림 시험의 옛 파일 이름을 바로잡음 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
"""M01 로직 테스트 컨테이너 — 견본 10 개가 실제 산림품셈 로직이고 막히지 않았는지.
|
|
|
|
흐름 그림(방식 C)과 고급 화면은 같은 `/calc` 를 씀 — 여기서는 10 개가 모두 첫 선택값으로 셈이 끝까지 가는지만 봄.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from M01_MasterData import M01_MasterData_Store as store
|
|
|
|
# 견본 10 개 — 복잡도(입력·표 찾기·로직 부르기·덧줄·재료)로 잰 순서 · 재는 법 `resources/master_data/scripts/로직_복잡도_재기.py`
|
|
KEYS = [
|
|
"GF000181", # 12-16 맨홀
|
|
"GF000177", # 12-12 날개벽
|
|
"GF000173", # 12-11-1 VR관(소켓식) 부설
|
|
"GF000174", # 12-11-2-1 흄관 부설
|
|
"GF000160", # 12-4 합판거푸집
|
|
"GF000182", # 12-17-1 펌프카 타설
|
|
"GF000069", # 7-11 동력상하차기 집재
|
|
"GF000219", # 13-4-1 돌쌓기 메쌓기(인력)
|
|
"GF000119", # 9-16-1 노체포설
|
|
"GF000137", # 10-4 중기운반 트레일러
|
|
]
|
|
|
|
|
|
def _first_inputs(logic: dict) -> dict:
|
|
"""고르기 = 첫 값 · 범위 = 아래 끝 · 나머지 = 10 (마법사가 흔히 넣는 값)."""
|
|
out = {}
|
|
for spec in logic.get("입력") or []:
|
|
if spec.get("고르기"):
|
|
out[spec["이름"]] = spec["고르기"][0]
|
|
elif spec.get("범위"):
|
|
out[spec["이름"]] = spec["범위"][0]
|
|
else:
|
|
out[spec["이름"]] = 10
|
|
return out
|
|
|
|
|
|
def test_ten_keys():
|
|
assert len(KEYS) == 10 and len(set(KEYS)) == 10
|
|
|
|
|
|
def test_keys_are_forest_logics_and_not_blocked():
|
|
for key in KEYS:
|
|
one = store.logic(key)
|
|
assert one["file"].startswith("로직_산림품셈_"), key
|
|
assert not one["blocked"], (key, one["reasons"])
|
|
|
|
|
|
def test_required_three_present():
|
|
# 메쌓기 13-4-1 · 노체 9-16-1 · 트럭 운반 10-4 — 끝까지 눌러 보는 셋
|
|
assert {"GF000219", "GF000119", "GF000137"} <= set(KEYS)
|
|
|
|
|
|
def test_calc_answers_for_each():
|
|
for key in KEYS:
|
|
one = store.logic(key)
|
|
answer = store.calc(key, _first_inputs(one["logic"]), None, None)
|
|
assert isinstance(answer, dict) and "ok" in answer, key
|