fix: BUG-007 列偏移修复 — 上边从 col 2 开始,右边在 cols+2/+3
1. 上边/下边列偏移从 [1, cols] → [2, cols+1](预留左边 Name 列后空一列) 2. 右边列偏移 cols+1/+2 → cols+2/+3(对齐上边偏移) 3. 更新 test_f012/test_f016 中的列引用 4. 更新 context.md 为修复后状态 验收测试全通过(10/10)。
This commit is contained in:
@@ -111,9 +111,9 @@ def calculate_layout(
|
||||
# 从第 3 行开始是左/下/右边引脚
|
||||
#
|
||||
# 左边: Number (r, 0) r ∈ [3, rows+2] Name (r, 1)
|
||||
# 下边: Number (rows+4, c) c ∈ [1, cols] Name (rows+3, c)
|
||||
# 右边: Number (r, cols+1) r ∈ [rows+2, 3] Name (r, cols) 逆序
|
||||
# 上边: Number (1, c) c ∈ [cols, 1] Name (2, c) 逆序
|
||||
# 下边: Number (rows+4, c) c ∈ [2, cols+1] Name (rows+3, c)
|
||||
# 右边: Number (r, cols+3) r ∈ [rows+2, 3] Name (r, cols+2) 逆序
|
||||
# 上边: Number (1, c) c ∈ [cols+1, 2] Name (2, c) 逆序
|
||||
#
|
||||
# Pin1: Number (3,0) = A4, Name (3,1) = B4 — 左上角
|
||||
|
||||
@@ -121,13 +121,13 @@ def calculate_layout(
|
||||
left_cells = [(r, 0) for r in range(3, rows + 3)]
|
||||
|
||||
# 下边:从左到右 (cols 个),Number 在最底行 rows+4
|
||||
bottom_cells = [(rows + 4, c) for c in range(1, cols + 1)]
|
||||
bottom_cells = [(rows + 4, c) for c in range(2, cols + 2)]
|
||||
|
||||
# 右边:从下到上 (rows 个),Number 在 cols+1 列(右扩一列)
|
||||
right_cells = [(r, cols + 1) for r in range(rows + 2, 2, -1)]
|
||||
# 右边:从下到上 (rows 个),Number 在 cols+3 列(右扩三列:上边偏移1 + 间距1)
|
||||
right_cells = [(r, cols + 3) for r in range(rows + 2, 2, -1)]
|
||||
|
||||
# 上边:从右到左 (cols 个)
|
||||
top_cells = [(1, c) for c in range(cols, 0, -1)]
|
||||
# 上边:从右到左 (cols 个),从 col 2 开始(预留左边 Name 列 + 空列)
|
||||
top_cells = [(1, c) for c in range(cols + 1, 1, -1)]
|
||||
|
||||
# ── 构建 EdgePins ─────────────────────────────────────────────
|
||||
def _make_edge(edge_name: str, pin_list: list[PinListEntry],
|
||||
|
||||
@@ -261,15 +261,15 @@ def test_f012_pinname_position():
|
||||
output_path=None,
|
||||
)
|
||||
|
||||
# ── 3. 检查单元格位置 (BUG-007 fixed) ─────────────────────
|
||||
# ── 3. 检查单元格位置 (BUG-007 final) ──────────────────
|
||||
# 5×5: rows=5, cols=5, 20 pins
|
||||
# 上边: Number (1, 5..1), Name (2, 1..5)
|
||||
# 上边: Number (1, 6..2), Name (2, 6..2)
|
||||
# 左边: Number (3..7, 0), Name (3..7, 1)
|
||||
# 下边: Name (8, 1..5), Number (9, 1..5)
|
||||
# 右边: Number (7..3, 6), Name (7..3, 5)
|
||||
# 下边: Name (8, 2..6), Number (9, 2..6)
|
||||
# 右边: Number (7..3, 8), Name (7..3, 7)
|
||||
|
||||
# ── 3a. 验证上边 Name 位置 (2, 1..cols) ─────────────────
|
||||
for c in range(1, cols + 1):
|
||||
# ── 3a. 验证上边 Name 位置 (2, 2..cols+1) ──────────────
|
||||
for c in range(2, cols + 2):
|
||||
num_ref = rc_to_cell_ref(1, c) # Number at row 1
|
||||
name_ref = rc_to_cell_ref(2, c) # Name at row 2
|
||||
assert num_ref in data, f"上边 Number {num_ref} 缺失"
|
||||
@@ -277,8 +277,8 @@ def test_f012_pinname_position():
|
||||
f"上边 Name 应在 {name_ref} (row 2), 但未找到。Number 在 {num_ref}"
|
||||
)
|
||||
|
||||
# ── 3b. 验证下边 Name 位置 (rows+3=8, 1..cols) ──────────
|
||||
for c in range(1, cols + 1):
|
||||
# ── 3b. 验证下边 Name 位置 (rows+3=8, 2..cols+1) ─────
|
||||
for c in range(2, cols + 2):
|
||||
num_ref = rc_to_cell_ref(rows + 4, c) # Number at row 9
|
||||
name_ref = rc_to_cell_ref(rows + 3, c) # Name at row 8
|
||||
assert num_ref in data, f"下边 Number {num_ref} 缺失"
|
||||
@@ -293,10 +293,10 @@ def test_f012_pinname_position():
|
||||
assert num_ref in data, f"左边 Number {num_ref} 缺失"
|
||||
assert name_ref in data, f"左边 Name {name_ref} 缺失"
|
||||
|
||||
# ── 3d. 验证右边 Name 位置 (7..3, 5) ────────────────────
|
||||
# ── 3d. 验证右边 Name 位置 (7..3, 7) ────────────────────
|
||||
for r in range(rows + 2, 2, -1):
|
||||
num_ref = rc_to_cell_ref(r, cols + 1)
|
||||
name_ref = rc_to_cell_ref(r, cols)
|
||||
num_ref = rc_to_cell_ref(r, cols + 3)
|
||||
name_ref = rc_to_cell_ref(r, cols + 2)
|
||||
assert num_ref in data, f"右边 Number {num_ref} 缺失"
|
||||
assert name_ref in data, f"右边 Name {name_ref} 缺失"
|
||||
|
||||
@@ -777,22 +777,22 @@ def test_f016_qfn60_list_to_map():
|
||||
f"Number 单元格应覆盖 1..60\n缺失: {sorted(set(range(1,61)) - all_numbers)}"
|
||||
)
|
||||
|
||||
# ── 验证四边布局(BUG-007 fixed layout)──────────────
|
||||
# BUG-007 修复布局:
|
||||
# ── 验证四边布局(BUG-007 final layout)──────────────
|
||||
# BUG-007 最终布局:
|
||||
# Title: A1 (row 0 only)
|
||||
# Top Numbers: (1, 1..15)
|
||||
# Top Names: (2, 1..15)
|
||||
# Top Numbers: (1, 2..16)
|
||||
# Top Names: (2, 2..16)
|
||||
# Left: Number (3..17, 0), Name (3..17, 1)
|
||||
# Bottom: Name (18, 1..15), Number (19, 1..15)
|
||||
# Right: Number (17..3, 16), Name (17..3, 15)
|
||||
# Bottom: Name (18, 2..16), Number (19, 2..16)
|
||||
# Right: Number (17..3, 18), Name (17..3, 17)
|
||||
|
||||
# Top Numbers 在 row 1
|
||||
for c in range(1, QFN60_COLS + 1):
|
||||
# Top Numbers 在 row 1, col 2..16
|
||||
for c in range(2, QFN60_COLS + 2):
|
||||
ref = rc_to_cell_ref(1, c)
|
||||
assert ref in data, f"Top Number {ref} 缺失"
|
||||
|
||||
# Top Names 在 row 2
|
||||
for c in range(1, QFN60_COLS + 1):
|
||||
# Top Names 在 row 2, col 2..16
|
||||
for c in range(2, QFN60_COLS + 2):
|
||||
ref = rc_to_cell_ref(2, c)
|
||||
assert ref in data, f"Top Name {ref} 缺失"
|
||||
assert data[ref].startswith("Pin"), f"Top Name {ref} = {data[ref]}"
|
||||
@@ -808,25 +808,25 @@ def test_f016_qfn60_list_to_map():
|
||||
assert ref in data, f"Left Name {ref} 缺失"
|
||||
assert data[ref].startswith("Pin"), f"Left Name {ref} = {data[ref]}"
|
||||
|
||||
# Bottom Names 在 row 18
|
||||
for c in range(1, QFN60_COLS + 1):
|
||||
# Bottom Names 在 row 18, col 2..16
|
||||
for c in range(2, QFN60_COLS + 2):
|
||||
ref = rc_to_cell_ref(QFN60_ROWS + 3, c)
|
||||
assert ref in data, f"Bottom Name {ref} 缺失"
|
||||
assert data[ref].startswith("Pin"), f"Bottom Name {ref} = {data[ref]}"
|
||||
|
||||
# Bottom Numbers 在 row 19
|
||||
for c in range(1, QFN60_COLS + 1):
|
||||
# Bottom Numbers 在 row 19, col 2..16
|
||||
for c in range(2, QFN60_COLS + 2):
|
||||
ref = rc_to_cell_ref(QFN60_ROWS + 4, c)
|
||||
assert ref in data, f"Bottom Number {ref} 缺失"
|
||||
|
||||
# Right Numbers 在 col 16, rows 17..3
|
||||
# Right Numbers 在 col 18, rows 17..3
|
||||
for r in range(QFN60_ROWS + 2, 2, -1):
|
||||
ref = rc_to_cell_ref(r, QFN60_COLS + 1)
|
||||
ref = rc_to_cell_ref(r, QFN60_COLS + 3)
|
||||
assert ref in data, f"Right Number {ref} 缺失"
|
||||
|
||||
# Right Names 在 col 15, rows 17..3
|
||||
# Right Names 在 col 17, rows 17..3
|
||||
for r in range(QFN60_ROWS + 2, 2, -1):
|
||||
ref = rc_to_cell_ref(r, QFN60_COLS)
|
||||
ref = rc_to_cell_ref(r, QFN60_COLS + 2)
|
||||
assert ref in data, f"Right Name {ref} 缺失"
|
||||
assert data[ref].startswith("Pin"), f"Right Name {ref} = {data[ref]}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user