mirror of https://codeberg.org/topola/topola.git
tests: move common code to new common module
This commit is contained in:
parent
a02bf1541e
commit
e574043c2f
|
|
@ -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()))
|
||||||
|
|
|
||||||
|
|
@ -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())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue