tests: move common code to new common module

This commit is contained in:
Mikolaj Wielgus 2024-06-06 02:29:55 +02:00
parent a02bf1541e
commit e574043c2f
3 changed files with 8 additions and 161 deletions

View File

@ -183,7 +183,7 @@ impl<R: RulesTrait> Board<R> {
self.net_to_netname.get(&net) self.net_to_netname.get(&net)
} }
pub fn band_between_pins(&self, pinname1: &String, pinname2: &String) -> Option<BandIndex> { pub fn band_between_pins(&self, pinname1: &str, pinname2: &str) -> Option<BandIndex> {
if let Some(band) = self if let Some(band) = self
.pinname_pair_to_band .pinname_pair_to_band
.get(&(pinname1.to_string(), pinname2.to_string())) .get(&(pinname1.to_string(), pinname2.to_string()))

View File

@ -12,6 +12,8 @@ use topola::{
triangulation::GetTrianvertexIndex, triangulation::GetTrianvertexIndex,
}; };
mod common;
#[test] #[test]
fn test() { fn test() {
let design = DsnDesign::load_from_file( let design = DsnDesign::load_from_file(
@ -26,65 +28,5 @@ fn test() {
let (mut autorouter, ..) = invoker.destruct(); let (mut autorouter, ..) = invoker.destruct();
for ratline in autorouter.ratsnest().graph().edge_indices() { common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
// 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())
);
}
}
}
} }

View File

@ -16,6 +16,8 @@ use topola::{
triangulation::GetTrianvertexIndex, triangulation::GetTrianvertexIndex,
}; };
mod common;
#[test] #[test]
fn test() { fn test() {
let design = DsnDesign::load_from_file( let design = DsnDesign::load_from_file(
@ -30,103 +32,6 @@ fn test() {
let (mut autorouter, ..) = invoker.destruct(); let (mut autorouter, ..) = invoker.destruct();
for ratline in autorouter.ratsnest().graph().edge_indices() { common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
// Accessing endpoints may create new dots because apex construction is lazy, so we access common::assert_band_length(autorouter.board(), "J2-2", "D4-2", 15511.0, 0.5);
// 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));
}
} }