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] == []