From e119d467bf1dcb42632dd70c0d64f7defb6c8711 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 14 Nov 2026 16:19:45 +0900 Subject: [PATCH] =?UTF-8?q?fix(830-7):=20=EC=9D=BC=EA=B4=84=20=EC=8B=9C?= =?UTF-8?q?=ED=97=98=20=EA=B3=84=EC=82=B0=EC=9D=B4=20=EA=B3=A0=EB=A5=B4?= =?UTF-8?q?=EA=B8=B0=20=EB=B9=88=20=EC=9E=85=EB=A0=A5=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=EC=9D=84=20=EA=B1=B4=EB=84=88=EB=9C=80=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=85=88=20=E2=80=94=20GC001199~1201=20IndexError=20=ED=95=B4?= =?UTF-8?q?=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - check_master.calc_all: 고르기 목록이 빈 입력이 있는 로직(내 기계 전용 식)은 멈춤이 아닌 「건너뜀」 — 결과는 (통과 · 멈춤 · 건너뜀 키) 셋 · 계산전부 출력에 건너뜀 수와 키 - 호출 시험 둘(test_masterdata_check · test_713_4)을 셋 묶음에 맞춤 - 나머지 1,517 개 시험 계산 결과 그대로 · 정본 · 금액 안 바뀜 Co-Authored-By: Claude Sonnet 5.5 --- resources/master_data/scripts/check_master.py | 17 +++++++++++------ resources/tester/test_713_4_source_match.py | 4 ++-- resources/tester/test_masterdata_check.py | 4 ++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/resources/master_data/scripts/check_master.py b/resources/master_data/scripts/check_master.py index debd4b71e..1645599ca 100644 --- a/resources/master_data/scripts/check_master.py +++ b/resources/master_data/scripts/check_master.py @@ -519,19 +519,24 @@ def 시험입력(row: dict) -> dict: return given -def calc_all(files: dict[str, dict], whole: mf.Master) -> tuple[int, list[str]]: - """로직 전부를 시험 입력으로 돌림 — (통과 수, 멈춘 줄 목록).""" - passed, stuck = 0, [] +def calc_all(files: dict[str, dict], whole: mf.Master) -> tuple[int, list[str], list[str]]: + """로직 전부를 시험 입력으로 돌림 — (통과 수, 멈춘 줄 목록, 건너뜀 키 목록). + 고르기 목록이 빈 입력이 있는 로직(GC001199~1201 = 내 기계 전용 식 · M01 정본 기계가 안 씀)은 + 고를 값이 없어 건너뜀 — 멈춤으로 세지 않음.""" + passed, stuck, skipped = 0, [], [] for data in files.values(): if data.get("그룹") != "로직": continue for row in data.get("줄", []): + if any(i.get("고르기") == [] for i in row.get("입력", [])): + skipped.append(str(row["키"])) + continue try: mf.run(whole, str(row["키"]), 시험입력(row)) passed += 1 except mf.FormulaError as err: stuck.append(f"{row['키']} {row.get('이름')} · {err}") - return passed, stuck + return passed, stuck, skipped def _value(text: str): @@ -549,8 +554,8 @@ def main(argv: list[str]) -> int: return 0 if mode == "계산전부": files, whole = load(), master() - passed, stuck = calc_all(files, whole) - print(f"(계산) 통과 {passed} · 멈춤 {len(stuck)}") + passed, stuck, skipped = calc_all(files, whole) + print(f"(계산) 통과 {passed} · 멈춤 {len(stuck)} · 건너뜀 {len(skipped)} {skipped}") for line in stuck: print(" " + line) return 0 diff --git a/resources/tester/test_713_4_source_match.py b/resources/tester/test_713_4_source_match.py index 098b9a076..80b9cb0ee 100644 --- a/resources/tester/test_713_4_source_match.py +++ b/resources/tester/test_713_4_source_match.py @@ -74,7 +74,7 @@ def test_방제_열_여덟_플랜트_한_표() -> None: "압력배관용 탄소강관 KSD3562 SCH#40", } whole = cm.mf.Master(files) - passed, stuck = cm.calc_all(files, whole) - assert not stuck and passed == sum( + passed, stuck, skipped = cm.calc_all(files, whole) + assert not stuck and passed + len(skipped) == sum( 1 for d in files.values() if d.get("그룹") == "로직" for _ in d["줄"] ) diff --git a/resources/tester/test_masterdata_check.py b/resources/tester/test_masterdata_check.py index f56df4954..e7d065c86 100644 --- a/resources/tester/test_masterdata_check.py +++ b/resources/tester/test_masterdata_check.py @@ -1008,7 +1008,7 @@ def test_품셈재료_고르기_칸이_옛_파일에_있음(): def test_로직_일괄_시험계산(): """로직 전부를 시험 입력으로 돌림 — 멈춤은 데이터 결손(관리자 값·규격 미지정)만.""" files = cm.load() - passed, stuck = cm.calc_all(files, mf.Master(files)) + passed, stuck, _ = cm.calc_all(files, mf.Master(files)) assert passed >= 1279 남은_까닭 = ( "관리자가 채울 값", @@ -1085,7 +1085,7 @@ def test_테스트_대상_로직_입력에_설명(whole): def test_표_조건_조합이_없어_멈추지_않음(): """표에 없는 조합(오거비트 혼합층 등)으로는 시험 계산을 돌리지 않음 — 「맞는 줄 0개」 0건.""" files = cm.load() - _, stuck = cm.calc_all(files, mf.Master(files)) + _, stuck, _ = cm.calc_all(files, mf.Master(files)) assert [x for x in stuck if "맞는 줄" in x] == []