A T depends on every connection between its copper and its group
Anchoring a T only on the connection whose copper it touched missed the connections that tie that copper to the T's own group. When one of those was ripped, the T stayed routed but cut off: on charge-sense freeroute counted 15 unrouted while KiCad found 27 opens. Routed connections of a net form a forest, so the path back is unique; the T now depends on all of it. KiCad's opens and freeroute's count agree again (18 against 17, the extra one a GND pour island left to the fill).
This commit is contained in:
@@ -139,3 +139,32 @@ def test_occupancy_stays_honest(tree_nets):
|
||||
for anchor, hanging in router._dependents.items():
|
||||
for i in hanging:
|
||||
assert conns[i].routed and conns[anchor].routed
|
||||
|
||||
|
||||
# P1-P2 along the top, P3 far off to the lower right, P4 just under the
|
||||
# middle of the P1-P2 leg.
|
||||
CHAIN_TEE = TEE.replace(
|
||||
""" (place P3 100000 -70000 front 0)
|
||||
""",
|
||||
""" (place P3 190000 -90000 front 0)
|
||||
(place P4 100000 -40000 front 0)
|
||||
""",
|
||||
).replace("(pins P1-1 P2-1 P3-1)", "(pins P1-1 P2-1 P3-1 P4-1)")
|
||||
|
||||
|
||||
def test_a_tee_depends_on_every_connection_back_to_its_group():
|
||||
"""Joined as P1-P2, P2-P3, P3-P4, P4's connection tees onto P1-P2 copper,
|
||||
which reaches P3's group only through P2-P3. Ripping P2-P3 must take the T
|
||||
too, or it would be counted routed while cut off from P3."""
|
||||
router = _router(text=CHAIN_TEE)
|
||||
conns = router._conns = router._build_connections()
|
||||
groups = {c.a.component_ref: c.a_group for c in conns}
|
||||
groups.update({c.b.component_ref: c.b_group for c in conns})
|
||||
for conn, (a, b) in zip(conns, (("P1", "P2"), ("P2", "P3"), ("P3", "P4")), strict=True):
|
||||
conn.a_group, conn.b_group = groups[a], groups[b]
|
||||
for conn in conns:
|
||||
assert router._try_route(conn, conns)
|
||||
first, second, third = conns
|
||||
assert third.path[0] in first.copper # the T lands on the far leg
|
||||
assert third.anchors == {first.index, second.index}
|
||||
assert router._with_dependents([second], conns) == [second, third]
|
||||
|
||||
Reference in New Issue
Block a user