fix(m02-cf): 견본 색을 Model 기본 색(BOX_COLOR)과 같게 · 시험이 Model 값과 대조

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BU9gbNE3aWFUvE61pS2WGt
This commit is contained in:
2026-10-01 16:08:28 +09:00
co-authored by Claude Opus 5.5
parent d415923d16
commit 2c4078e187
4 changed files with 30 additions and 18 deletions
@@ -7,7 +7,7 @@
"id": "in-var",
"kind": "input",
"name": "쌓기 조건",
"color": "#3b82f6",
"color": "#2f80ed",
"unit": "-",
"x": 40,
"y": 40,
@@ -49,7 +49,7 @@
"id": "in-poom",
"kind": "input",
"name": "메쌓기 품표",
"color": "#3b82f6",
"color": "#2f80ed",
"unit": "-",
"x": 40,
"y": 300,
@@ -67,7 +67,7 @@
"id": "in-rate",
"kind": "input",
"name": "높이 증가율표",
"color": "#3b82f6",
"color": "#2f80ed",
"unit": "-",
"x": 40,
"y": 460,
@@ -85,7 +85,7 @@
"id": "in-labor",
"kind": "input",
"name": "인력",
"color": "#3b82f6",
"color": "#2f80ed",
"unit": "-",
"x": 40,
"y": 620,
@@ -113,7 +113,7 @@
"id": "fn-rate",
"kind": "function",
"name": "증가율 찾기",
"color": "#f59e0b",
"color": "#7b4fd6",
"unit": "%",
"x": 340,
"y": 420,
@@ -179,7 +179,7 @@
"id": "fn-poom0",
"kind": "function",
"name": "석공 품",
"color": "#f59e0b",
"color": "#7b4fd6",
"unit": "인/㎡",
"x": 640,
"y": 80,
@@ -275,7 +275,7 @@
"id": "fn-poom1",
"kind": "function",
"name": "보통인부 품",
"color": "#f59e0b",
"color": "#7b4fd6",
"unit": "인/㎡",
"x": 640,
"y": 300,
@@ -371,7 +371,7 @@
"id": "fn-pay0",
"kind": "function",
"name": "석공 노무비",
"color": "#f59e0b",
"color": "#7b4fd6",
"unit": "원/㎡",
"x": 940,
"y": 80,
@@ -434,7 +434,7 @@
"id": "fn-pay1",
"kind": "function",
"name": "보통인부 노무비",
"color": "#f59e0b",
"color": "#7b4fd6",
"unit": "원/㎡",
"x": 940,
"y": 300,
@@ -497,7 +497,7 @@
"id": "fn-sum",
"kind": "function",
"name": "노무비 합",
"color": "#f59e0b",
"color": "#7b4fd6",
"unit": "원/㎡",
"x": 1240,
"y": 190,
@@ -560,7 +560,7 @@
"id": "out-pay",
"kind": "output",
"name": "노무비",
"color": "#10b981",
"color": "#27ae60",
"unit": "원/㎡",
"x": 1520,
"y": 190,
@@ -7,7 +7,7 @@
"id": "in-var",
"kind": "input",
"name": "바탕 값",
"color": "#3b82f6",
"color": "#2f80ed",
"unit": "-",
"x": 40,
"y": 80,
@@ -34,7 +34,7 @@
"id": "fn-rate",
"kind": "function",
"name": "공구손료",
"color": "#f59e0b",
"color": "#7b4fd6",
"unit": "원",
"x": 340,
"y": 80,
@@ -97,7 +97,7 @@
"id": "out-mat",
"kind": "output",
"name": "재료비",
"color": "#10b981",
"color": "#27ae60",
"unit": "원",
"x": 640,
"y": 80,
@@ -7,7 +7,7 @@
"id": "in-var",
"kind": "input",
"name": "덤프트럭 조건",
"color": "#3b82f6",
"color": "#2f80ed",
"unit": "-",
"x": 40,
"y": 80,
@@ -46,7 +46,7 @@
"id": "fn-q",
"kind": "function",
"name": "시간당 작업량",
"color": "#f59e0b",
"color": "#7b4fd6",
"unit": "㎥/시간",
"x": 340,
"y": 80,
@@ -129,7 +129,7 @@
"id": "out-q",
"kind": "output",
"name": "시간당 작업량",
"color": "#10b981",
"color": "#27ae60",
"unit": "㎥/시간",
"x": 640,
"y": 80,
+13 -1
View File
@@ -10,6 +10,7 @@
from __future__ import annotations
import json
import re
import shutil
import subprocess
from decimal import Decimal
@@ -89,6 +90,17 @@ def _order(lg: dict) -> list[dict]:
return [boxes[i] for i in done]
# Model 기본 색(`M02_CF_Model.ts` BOX_COLOR) — 견본 색은 이것과 같아야 함
BOX_COLOR = dict(
re.findall(
r'(\w+): "(#[0-9a-fA-F]{6})"',
re.search(
r"BOX_COLOR[^{]*\{([^}]*)\}", (FOLDER / "M02_CF_Model.ts").read_text(encoding="utf-8")
).group(1),
)
)
@pytest.mark.parametrize("name", ["masonry", "rate", "value"])
def test_견본_모양(name: str) -> None:
lg = SAMPLES[name]
@@ -100,7 +112,7 @@ def test_견본_모양(name: str) -> None:
for b in lg["boxes"]:
assert b["kind"] in ("input", "function", "output")
assert (
b["color"].startswith("#")
b["color"] == BOX_COLOR[b["kind"]]
and b["unit"]
and isinstance(b["x"], int)
and isinstance(b["y"], int)