Window boards: never search a connection ending outside the window
With items away from the window left off its board, a stub from the window edge out to a rerouted net's far pin crossed copper the exact check never saw: 38 shorts on th-eda's flight controller. A connection with an end outside the bounds is now left unrouted, and a window whose new copper leaves the window is refused.
This commit is contained in:
@@ -110,3 +110,19 @@ def test_window_board_keeps_far_items_of_the_rerouted_nets_only():
|
||||
refs = {p.component_ref for p in sub.get_pins()}
|
||||
assert {"P1", "P2"} <= refs # net N's pins, though outside the view
|
||||
assert not refs & {"Q1", "Q2"} # net M's, far away, left out
|
||||
|
||||
|
||||
def test_a_connection_ending_outside_the_window_gets_no_copper():
|
||||
"""Its far end has no grid cells; a stub out to it would cross items the
|
||||
window board never saw."""
|
||||
from freeroute.route.exact_router import route_board_exact
|
||||
|
||||
dsn = parse_dsn(_slot(far=True))
|
||||
s = dsn.resolution.value
|
||||
window = IntBox(70000, -70000, 130000, -30000) # the slot only; net M's pins are far off
|
||||
result = route_board_exact(
|
||||
build_board(dsn), trace_width=round(_rule_width_dsn(dsn) * s),
|
||||
clearance=round(_rule_clearance_dsn(dsn) * s), only_nets=frozenset({2}), bounds=window,
|
||||
).result
|
||||
assert [f[0] for f in result.failed] == [2]
|
||||
assert not result.wires.get(2) and not result.vias.get(2)
|
||||
|
||||
Reference in New Issue
Block a user