Files
SPipe/backend/blocksys/tests/test_graph.py
T
bjkim1 21ebb16fb7 SPipe 데모 v2 (2026-10-30) 서버 배포본
- SPipe_server_2026-10-30.zip 내용을 풀어서 등록 (압축 파일은 올리지 않음)
- README에 데모 v2 서버 업데이트 순서 추가, 저장소에 없는 문서 목차 정리
- 패치내역을 docs/로 이동, _worklog.md 추가
- 임시 파일(backend/temp.*)과 API 키가 든 파일은 제외
2026-10-30 11:00:46 +09:00

40 lines
1.5 KiB
Python

from __future__ import annotations
def test_node_preservation(bundle, weighted_graph):
assert set(weighted_graph.nodes) == set(bundle.graph.nodes)
def test_edge_preservation(bundle, weighted_graph):
assert weighted_graph.number_of_edges() == bundle.graph.number_of_edges()
def test_weight_range(weighted_graph):
weights = [d["w"] for _, _, d in weighted_graph.edges(data=True)]
assert weights, "가중치가 부여된 엣지가 없습니다"
assert all(0.0 < w <= 1.0 for w in weights)
def test_large_consumer_edges_suppressed(bundle, weighted_graph, baseline, cfg):
from blocksys.graph import build_weighted_graph
large_nodes = [n for n, d in weighted_graph.nodes(data=True) if d.get("is_large_consumer")]
if not large_nodes:
return # Net3 기본 설정(5 L/s)에는 대수용가가 없을 수 있음
plain = build_weighted_graph(bundle.graph, baseline, cfg)
# 대수용가 인접 엣지는 제약 반영 전보다 가중치가 낮아야 한다(isolate 기본 정책)
for n in large_nodes:
for u, v, d in weighted_graph.edges(n, data=True):
assert d["w"] <= plain[u][v]["w"]
def test_reproducibility(bundle, baseline, cfg):
from blocksys.graph import apply_hard_constraints, build_weighted_graph
g1 = apply_hard_constraints(build_weighted_graph(bundle.graph, baseline, cfg), cfg)
g2 = apply_hard_constraints(build_weighted_graph(bundle.graph, baseline, cfg), cfg)
for u, v, d in g1.edges(data=True):
assert g2[u][v]["w"] == d["w"]