Merge remote-tracking branch 'origin/sub_laptop_1' into main_laptop_1
This commit is contained in:
@@ -554,6 +554,36 @@ def show(result: dict) -> str:
|
||||
return "\n".join(rows)
|
||||
|
||||
|
||||
def 시험입력(row: dict) -> dict:
|
||||
"""일괄 시험 계산용 입력 한 벌 — 고르기 첫 값 · 범위 위끝 · 줄의 「시험입력」 이 이김.
|
||||
시험 계산 전용 — 정본 계산은 화면이 준 값만 씀."""
|
||||
given = {}
|
||||
for spec in row.get("입력", []):
|
||||
if "고르기" in spec:
|
||||
given[spec["이름"]] = spec["고르기"][0]
|
||||
elif "범위" in spec:
|
||||
given[spec["이름"]] = spec["범위"][1]
|
||||
else:
|
||||
given[spec["이름"]] = Decimal(1)
|
||||
given.update(row.get("시험입력") or {})
|
||||
return given
|
||||
|
||||
|
||||
def calc_all(files: dict[str, dict], whole: mf.Master) -> tuple[int, list[str]]:
|
||||
"""로직 전부를 시험 입력으로 돌림 — (통과 수, 멈춘 줄 목록)."""
|
||||
passed, stuck = 0, []
|
||||
for data in files.values():
|
||||
if data.get("그룹") != "로직":
|
||||
continue
|
||||
for row in data.get("줄", []):
|
||||
try:
|
||||
mf.run(whole, str(row["키"]), 시험입력(row))
|
||||
passed += 1
|
||||
except mf.FormulaError as err:
|
||||
stuck.append(f"{row['키']} {row.get('이름')} · {err}")
|
||||
return passed, stuck
|
||||
|
||||
|
||||
def _value(text: str):
|
||||
try:
|
||||
return Decimal(text)
|
||||
@@ -567,6 +597,13 @@ def main(argv: list[str]) -> int:
|
||||
given = dict(arg.split("=", 1) for arg in argv[2:])
|
||||
print(show(mf.run(master(), argv[1], {k: _value(v) for k, v in given.items()})))
|
||||
return 0
|
||||
if mode == "계산전부":
|
||||
files, whole = load(), master()
|
||||
passed, stuck = calc_all(files, whole)
|
||||
print(f"(계산) 통과 {passed} · 멈춤 {len(stuck)}")
|
||||
for line in stuck:
|
||||
print(" " + line)
|
||||
return 0
|
||||
names = argv[1:] or None
|
||||
files, whole = load(names), master()
|
||||
report = {}
|
||||
|
||||
Reference in New Issue
Block a user