diff --git a/src/autorouter/board.rs b/src/autorouter/board.rs index 0ef014d..b4aacef 100644 --- a/src/autorouter/board.rs +++ b/src/autorouter/board.rs @@ -183,7 +183,7 @@ impl Board { self.net_to_netname.get(&net) } - pub fn band_between_pins(&self, pinname1: &String, pinname2: &String) -> Option { + pub fn band_between_pins(&self, pinname1: &str, pinname2: &str) -> Option { if let Some(band) = self .pinname_pair_to_band .get(&(pinname1.to_string(), pinname2.to_string())) diff --git a/tests/four_3rd_order_smd_lc_filters.rs b/tests/four_3rd_order_smd_lc_filters.rs index 2df0451..99e4b46 100644 --- a/tests/four_3rd_order_smd_lc_filters.rs +++ b/tests/four_3rd_order_smd_lc_filters.rs @@ -12,6 +12,8 @@ use topola::{ triangulation::GetTrianvertexIndex, }; +mod common; + #[test] fn test() { let design = DsnDesign::load_from_file( @@ -26,65 +28,5 @@ fn test() { let (mut autorouter, ..) = invoker.destruct(); - for ratline in autorouter.ratsnest().graph().edge_indices() { - // Accessing endpoints may create new dots because apex construction is lazy, so we access - // tem all before starting unionfind, as it requires a constant index bound. - let _ = autorouter.ratline_endpoints(ratline); - } - - let mut unionfind = UnionFind::new( - autorouter - .board() - .layout() - .drawing() - .geometry() - .graph() - .node_bound(), - ); - - for primitive in autorouter.board().layout().drawing().primitive_nodes() { - dbg!(primitive); - for joined in autorouter - .board() - .layout() - .drawing() - .geometry() - .joineds(primitive) - { - dbg!(joined); - unionfind.union(primitive.node_index(), joined.node_index()); - } - } - - for ratline in autorouter.ratsnest().graph().edge_indices() { - let (source_dot, target_dot) = autorouter.ratline_endpoints(ratline); - let source_net = autorouter - .board() - .layout() - .drawing() - .primitive(source_dot) - .maybe_net(); - let target_net = autorouter - .board() - .layout() - .drawing() - .primitive(target_dot) - .maybe_net(); - - assert_eq!(source_net, target_net); - let net = source_net.unwrap(); - - if let Some(netname) = autorouter.board().netname(net) { - dbg!(netname); - - // We don't route GND. - if netname != "GND" { - dbg!(source_dot, target_dot); - assert_eq!( - unionfind.find(source_dot.node_index()), - unionfind.find(target_dot.node_index()) - ); - } - } - } + common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu"); } diff --git a/tests/single_layer_tht_diode_bridge_rectifier.rs b/tests/single_layer_tht_diode_bridge_rectifier.rs index 4b6c94b..bfc14ba 100644 --- a/tests/single_layer_tht_diode_bridge_rectifier.rs +++ b/tests/single_layer_tht_diode_bridge_rectifier.rs @@ -16,6 +16,8 @@ use topola::{ triangulation::GetTrianvertexIndex, }; +mod common; + #[test] fn test() { let design = DsnDesign::load_from_file( @@ -30,103 +32,6 @@ fn test() { let (mut autorouter, ..) = invoker.destruct(); - for ratline in autorouter.ratsnest().graph().edge_indices() { - // Accessing endpoints may create new dots because apex construction is lazy, so we access - // tem all before starting unionfind, as it requires a constant index bound. - let _ = autorouter.ratline_endpoints(ratline); - } - - let mut unionfind = UnionFind::new( - autorouter - .board() - .layout() - .drawing() - .geometry() - .graph() - .node_bound(), - ); - - for primitive in autorouter.board().layout().drawing().primitive_nodes() { - dbg!(primitive); - for joined in autorouter - .board() - .layout() - .drawing() - .geometry() - .joineds(primitive) - { - dbg!(joined); - unionfind.union(primitive.node_index(), joined.node_index()); - } - } - - for ratline in autorouter.ratsnest().graph().edge_indices() { - let (source_dot, target_dot) = autorouter.ratline_endpoints(ratline); - - let source_layer = autorouter - .board() - .layout() - .drawing() - .primitive(source_dot) - .layer(); - let target_layer = autorouter - .board() - .layout() - .drawing() - .primitive(target_dot) - .layer(); - - let Some(source_layername) = autorouter.board().layername(source_layer) else { - continue; - }; - - let Some(target_layername) = autorouter.board().layername(target_layer) else { - continue; - }; - - if source_layername != "F.Cu" || target_layername != "F.Cu" { - continue; - } - - let source_net = autorouter - .board() - .layout() - .drawing() - .primitive(source_dot) - .maybe_net(); - let target_net = autorouter - .board() - .layout() - .drawing() - .primitive(target_dot) - .maybe_net(); - - assert_eq!(source_net, target_net); - let net = source_net.unwrap(); - - if let Some(netname) = autorouter.board().netname(net) { - dbg!(netname); - dbg!(source_dot, target_dot); - assert_eq!( - unionfind.find(source_dot.node_index()), - unionfind.find(target_dot.node_index()) - ); - } - - let source_pinname = autorouter - .board() - .node_pinname(NodeIndex::Primitive(source_dot.into())) - .unwrap(); - let target_pinname = autorouter - .board() - .node_pinname(NodeIndex::Primitive(target_dot.into())) - .unwrap(); - dbg!(source_pinname, target_pinname); - - let band = autorouter - .board() - .band_between_pins(source_pinname, target_pinname) - .unwrap(); - dbg!(autorouter.board().layout().band_length(band)); - } + common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu"); + common::assert_band_length(autorouter.board(), "J2-2", "D4-2", 15511.0, 0.5); }