mirror of https://codeberg.org/topola/topola.git
test: Report route lengths for benchmarking purposes
This commit is contained in:
parent
e7e3e7b6f8
commit
5abce8b655
|
|
@ -32,7 +32,7 @@ steps:
|
||||||
- curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
|
- curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
|
||||||
- cargo binstall --no-confirm cargo-nextest
|
- cargo binstall --no-confirm cargo-nextest
|
||||||
- rustup default "$CHANNEL"
|
- rustup default "$CHANNEL"
|
||||||
- cargo nextest run -j4 --verbose --no-default-features --features "$FEATURES"
|
- cargo nextest run -j4 --hide-progress-bar --success-output final --no-default-features --features "$FEATURES"
|
||||||
when:
|
when:
|
||||||
event: [pull_request, push, tag]
|
event: [pull_request, push, tag]
|
||||||
# Only run tests for stable channel to avoid straining Codeberg's CI.
|
# Only run tests for stable channel to avoid straining Codeberg's CI.
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,10 @@ use topola::{
|
||||||
Autorouter,
|
Autorouter,
|
||||||
},
|
},
|
||||||
board::{edit::BoardEdit, AccessMesadata, Board},
|
board::{edit::BoardEdit, AccessMesadata, Board},
|
||||||
drawing::graph::{GetMaybeNet, PrimitiveIndex},
|
drawing::{
|
||||||
|
graph::{GetMaybeNet, MakePrimitiveRef, PrimitiveIndex},
|
||||||
|
primitive::MakePrimitiveShape,
|
||||||
|
},
|
||||||
geometry::{shape::MeasureLength, GenericNode, GetLayer},
|
geometry::{shape::MeasureLength, GenericNode, GetLayer},
|
||||||
graph::{GetIndex, MakeRef},
|
graph::{GetIndex, MakeRef},
|
||||||
router::{navmesh::Navmesh, RouterOptions},
|
router::{navmesh::Navmesh, RouterOptions},
|
||||||
|
|
@ -43,11 +46,16 @@ pub fn create_invoker_and_assert(
|
||||||
invoker
|
invoker
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn replay_and_assert(invoker: &mut Invoker<SpecctraMesadata>, filename: &str, variant: &str) {
|
pub fn replay_and_assert_and_report(
|
||||||
|
invoker: &mut Invoker<SpecctraMesadata>,
|
||||||
|
filename: &str,
|
||||||
|
variant: &str,
|
||||||
|
) {
|
||||||
let file = File::open(filename).unwrap();
|
let file = File::open(filename).unwrap();
|
||||||
let history: History = serde_json::from_reader(file).unwrap();
|
let history: History = serde_json::from_reader(file).unwrap();
|
||||||
|
|
||||||
invoker.replay(history);
|
invoker.replay(history);
|
||||||
|
report_route_lengths(invoker.autorouter());
|
||||||
|
|
||||||
if variant == "with_undo_redo_replay" {
|
if variant == "with_undo_redo_replay" {
|
||||||
assert_undo_redo_replay(invoker, filename);
|
assert_undo_redo_replay(invoker, filename);
|
||||||
|
|
@ -162,7 +170,7 @@ pub fn assert_navnode_count(
|
||||||
assert_eq!(navmesh.graph().node_count(), expected_count);
|
assert_eq!(navmesh.graph().node_count(), expected_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn assert_single_layer_groundless_autoroute(
|
pub fn assert_that_all_single_layer_groundless_ratlines_are_autorouted(
|
||||||
autorouter: &mut Autorouter<impl AccessMesadata>,
|
autorouter: &mut Autorouter<impl AccessMesadata>,
|
||||||
layername: &str,
|
layername: &str,
|
||||||
) {
|
) {
|
||||||
|
|
@ -262,3 +270,36 @@ pub fn assert_band_length(
|
||||||
rel_err
|
rel_err
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn report_route_lengths(autorouter: &Autorouter<impl AccessMesadata>) {
|
||||||
|
let mut total_length = 0.0;
|
||||||
|
|
||||||
|
for layer in 0..autorouter.board().layout().drawing().layer_count() {
|
||||||
|
let mut layer_total_length = 0.0;
|
||||||
|
|
||||||
|
for primitive in autorouter
|
||||||
|
.board()
|
||||||
|
.layout()
|
||||||
|
.drawing()
|
||||||
|
.layer_primitive_nodes(layer)
|
||||||
|
{
|
||||||
|
match primitive {
|
||||||
|
PrimitiveIndex::LooseDot(..)
|
||||||
|
| PrimitiveIndex::LoneLooseSeg(..)
|
||||||
|
| PrimitiveIndex::SeqLooseSeg(..) => {
|
||||||
|
layer_total_length += primitive
|
||||||
|
.primitive_ref(autorouter.board().layout().drawing())
|
||||||
|
.shape()
|
||||||
|
.length();
|
||||||
|
}
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dbg!(layer, layer_total_length);
|
||||||
|
|
||||||
|
total_length += layer_total_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbg!(total_length);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,14 +28,17 @@ fn autoroute_4x4_1206_led_matrix_breakout(variant: &str) {
|
||||||
"tests/single_layer/4x4_1206_led_matrix_breakout/4x4_1206_led_matrix_breakout.dsn",
|
"tests/single_layer/4x4_1206_led_matrix_breakout/4x4_1206_led_matrix_breakout.dsn",
|
||||||
);
|
);
|
||||||
let mut invoker = common::create_invoker_and_assert(autorouter);
|
let mut invoker = common::create_invoker_and_assert(autorouter);
|
||||||
common::replay_and_assert(
|
common::replay_and_assert_and_report(
|
||||||
&mut invoker,
|
&mut invoker,
|
||||||
"tests/single_layer/4x4_1206_led_matrix_breakout/autoroute_all.cmd",
|
"tests/single_layer/4x4_1206_led_matrix_breakout/autoroute_all.cmd",
|
||||||
variant,
|
variant,
|
||||||
);
|
);
|
||||||
|
|
||||||
let (mut autorouter, ..) = invoker.dissolve();
|
let (mut autorouter, ..) = invoker.dissolve();
|
||||||
common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
|
common::assert_that_all_single_layer_groundless_ratlines_are_autorouted(
|
||||||
|
&mut autorouter,
|
||||||
|
"F.Cu",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[apply(test_master)]
|
#[apply(test_master)]
|
||||||
|
|
@ -44,14 +47,17 @@ fn autoroute_4x4_1206_led_matrix_breakout_in_predefined_order(variant: &str) {
|
||||||
"tests/single_layer/4x4_1206_led_matrix_breakout/4x4_1206_led_matrix_breakout.dsn",
|
"tests/single_layer/4x4_1206_led_matrix_breakout/4x4_1206_led_matrix_breakout.dsn",
|
||||||
);
|
);
|
||||||
let mut invoker = common::create_invoker_and_assert(autorouter);
|
let mut invoker = common::create_invoker_and_assert(autorouter);
|
||||||
common::replay_and_assert(
|
common::replay_and_assert_and_report(
|
||||||
&mut invoker,
|
&mut invoker,
|
||||||
"tests/single_layer/4x4_1206_led_matrix_breakout/autoroute_all_in_predefined_order.cmd",
|
"tests/single_layer/4x4_1206_led_matrix_breakout/autoroute_all_in_predefined_order.cmd",
|
||||||
variant,
|
variant,
|
||||||
);
|
);
|
||||||
|
|
||||||
let (mut autorouter, ..) = invoker.dissolve();
|
let (mut autorouter, ..) = invoker.dissolve();
|
||||||
common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
|
common::assert_that_all_single_layer_groundless_ratlines_are_autorouted(
|
||||||
|
&mut autorouter,
|
||||||
|
"F.Cu",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[apply(test_master)]
|
#[apply(test_master)]
|
||||||
|
|
@ -60,14 +66,17 @@ fn autoroute_tht_de9_to_tht_de9(variant: &str) {
|
||||||
common::load_design("tests/single_layer/tht_de9_to_tht_de9/tht_de9_to_tht_de9.dsn");
|
common::load_design("tests/single_layer/tht_de9_to_tht_de9/tht_de9_to_tht_de9.dsn");
|
||||||
let mut invoker = common::create_invoker_and_assert(autorouter);
|
let mut invoker = common::create_invoker_and_assert(autorouter);
|
||||||
common::undo_all_and_assert(&mut invoker);
|
common::undo_all_and_assert(&mut invoker);
|
||||||
common::replay_and_assert(
|
common::replay_and_assert_and_report(
|
||||||
&mut invoker,
|
&mut invoker,
|
||||||
"tests/single_layer/tht_de9_to_tht_de9/autoroute_all.cmd",
|
"tests/single_layer/tht_de9_to_tht_de9/autoroute_all.cmd",
|
||||||
variant,
|
variant,
|
||||||
);
|
);
|
||||||
|
|
||||||
let (mut autorouter, ..) = invoker.dissolve();
|
let (mut autorouter, ..) = invoker.dissolve();
|
||||||
common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
|
common::assert_that_all_single_layer_groundless_ratlines_are_autorouted(
|
||||||
|
&mut autorouter,
|
||||||
|
"F.Cu",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[apply(test_master)]
|
#[apply(test_master)]
|
||||||
|
|
@ -75,14 +84,17 @@ fn autoroute_tht_de9_to_tht_de9_in_predefined_order(variant: &str) {
|
||||||
let autorouter =
|
let autorouter =
|
||||||
common::load_design("tests/single_layer/tht_de9_to_tht_de9/tht_de9_to_tht_de9.dsn");
|
common::load_design("tests/single_layer/tht_de9_to_tht_de9/tht_de9_to_tht_de9.dsn");
|
||||||
let mut invoker = common::create_invoker_and_assert(autorouter);
|
let mut invoker = common::create_invoker_and_assert(autorouter);
|
||||||
common::replay_and_assert(
|
common::replay_and_assert_and_report(
|
||||||
&mut invoker,
|
&mut invoker,
|
||||||
"tests/single_layer/tht_de9_to_tht_de9/autoroute_all_in_predefined_order.cmd",
|
"tests/single_layer/tht_de9_to_tht_de9/autoroute_all_in_predefined_order.cmd",
|
||||||
variant,
|
variant,
|
||||||
);
|
);
|
||||||
|
|
||||||
let (mut autorouter, ..) = invoker.dissolve();
|
let (mut autorouter, ..) = invoker.dissolve();
|
||||||
common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
|
common::assert_that_all_single_layer_groundless_ratlines_are_autorouted(
|
||||||
|
&mut autorouter,
|
||||||
|
"F.Cu",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[apply(test_master)]
|
#[apply(test_master)]
|
||||||
|
|
@ -90,7 +102,7 @@ fn autoroute_0603_breakout(variant: &str) {
|
||||||
let mut autorouter = common::load_design("tests/single_layer/0603_breakout/0603_breakout.dsn");
|
let mut autorouter = common::load_design("tests/single_layer/0603_breakout/0603_breakout.dsn");
|
||||||
common::assert_navnode_count(&mut autorouter, "R1-2", "J1-2", 22);
|
common::assert_navnode_count(&mut autorouter, "R1-2", "J1-2", 22);
|
||||||
let mut invoker = common::create_invoker_and_assert(autorouter);
|
let mut invoker = common::create_invoker_and_assert(autorouter);
|
||||||
common::replay_and_assert(
|
common::replay_and_assert_and_report(
|
||||||
&mut invoker,
|
&mut invoker,
|
||||||
"tests/single_layer/0603_breakout/autoroute_all.cmd",
|
"tests/single_layer/0603_breakout/autoroute_all.cmd",
|
||||||
variant,
|
variant,
|
||||||
|
|
@ -98,7 +110,10 @@ fn autoroute_0603_breakout(variant: &str) {
|
||||||
|
|
||||||
let (mut autorouter, ..) = invoker.dissolve();
|
let (mut autorouter, ..) = invoker.dissolve();
|
||||||
|
|
||||||
common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
|
common::assert_that_all_single_layer_groundless_ratlines_are_autorouted(
|
||||||
|
&mut autorouter,
|
||||||
|
"F.Cu",
|
||||||
|
);
|
||||||
//common::assert_number_of_conncomps(&mut autorouter, 2);
|
//common::assert_number_of_conncomps(&mut autorouter, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -109,7 +124,7 @@ fn autoroute_tht_diode_bridge_rectifier(variant: &str) {
|
||||||
);
|
);
|
||||||
common::assert_navnode_count(&mut autorouter, "J2-2", "D4-2", 68);
|
common::assert_navnode_count(&mut autorouter, "J2-2", "D4-2", 68);
|
||||||
let mut invoker = common::create_invoker_and_assert(autorouter);
|
let mut invoker = common::create_invoker_and_assert(autorouter);
|
||||||
common::replay_and_assert(
|
common::replay_and_assert_and_report(
|
||||||
&mut invoker,
|
&mut invoker,
|
||||||
"tests/single_layer/tht_diode_bridge_rectifier/autoroute_all.cmd",
|
"tests/single_layer/tht_diode_bridge_rectifier/autoroute_all.cmd",
|
||||||
variant,
|
variant,
|
||||||
|
|
@ -117,7 +132,10 @@ fn autoroute_tht_diode_bridge_rectifier(variant: &str) {
|
||||||
|
|
||||||
let (mut autorouter, ..) = invoker.dissolve();
|
let (mut autorouter, ..) = invoker.dissolve();
|
||||||
|
|
||||||
common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
|
common::assert_that_all_single_layer_groundless_ratlines_are_autorouted(
|
||||||
|
&mut autorouter,
|
||||||
|
"F.Cu",
|
||||||
|
);
|
||||||
//common::assert_number_of_conncomps(&mut autorouter, 4);
|
//common::assert_number_of_conncomps(&mut autorouter, 4);
|
||||||
common::assert_band_length(autorouter.board(), "J2-2", "D4-2", 15906.760439007436, 0.01);
|
common::assert_band_length(autorouter.board(), "J2-2", "D4-2", 15906.760439007436, 0.01);
|
||||||
|
|
||||||
|
|
@ -146,7 +164,7 @@ fn autoroute_4x_3rd_order_smd_lc_filters(variant: &str) {
|
||||||
);
|
);
|
||||||
common::assert_navnode_count(&mut autorouter, "J1-1", "L1-1", 558);
|
common::assert_navnode_count(&mut autorouter, "J1-1", "L1-1", 558);
|
||||||
let mut invoker = common::create_invoker_and_assert(autorouter);
|
let mut invoker = common::create_invoker_and_assert(autorouter);
|
||||||
common::replay_and_assert(
|
common::replay_and_assert_and_report(
|
||||||
&mut invoker,
|
&mut invoker,
|
||||||
"tests/single_layer/4x_3rd_order_smd_lc_filters/autoroute_signals.cmd",
|
"tests/single_layer/4x_3rd_order_smd_lc_filters/autoroute_signals.cmd",
|
||||||
variant,
|
variant,
|
||||||
|
|
@ -154,7 +172,10 @@ fn autoroute_4x_3rd_order_smd_lc_filters(variant: &str) {
|
||||||
|
|
||||||
let (mut autorouter, ..) = invoker.dissolve();
|
let (mut autorouter, ..) = invoker.dissolve();
|
||||||
|
|
||||||
common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
|
common::assert_that_all_single_layer_groundless_ratlines_are_autorouted(
|
||||||
|
&mut autorouter,
|
||||||
|
"F.Cu",
|
||||||
|
);
|
||||||
//common::assert_number_of_conncomps(&mut autorouter, 16);
|
//common::assert_number_of_conncomps(&mut autorouter, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -170,7 +191,7 @@ fn test_tht_3pin_xlr_to_tht_3pin_xlr(#[case] variant: &str) {
|
||||||
);
|
);
|
||||||
//common::assert_navnode_count(&mut autorouter, "R1-2", "J1-2", ?);
|
//common::assert_navnode_count(&mut autorouter, "R1-2", "J1-2", ?);
|
||||||
let mut invoker = common::create_invoker_and_assert(autorouter);
|
let mut invoker = common::create_invoker_and_assert(autorouter);
|
||||||
common::replay_and_assert(
|
common::replay_and_assert_and_report(
|
||||||
&mut invoker,
|
&mut invoker,
|
||||||
"tests/single_layer/tht_3pin_xlr_to_tht_3pin_xlr/autoroute_all.cmd",
|
"tests/single_layer/tht_3pin_xlr_to_tht_3pin_xlr/autoroute_all.cmd",
|
||||||
"undo_redo_replay",
|
"undo_redo_replay",
|
||||||
|
|
@ -178,7 +199,7 @@ fn test_tht_3pin_xlr_to_tht_3pin_xlr(#[case] variant: &str) {
|
||||||
|
|
||||||
let (mut autorouter, ..) = invoker.dissolve();
|
let (mut autorouter, ..) = invoker.dissolve();
|
||||||
|
|
||||||
common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
|
common::assert_that_all_single_layer_groundless_ratlines_are_autorouted(&mut autorouter, "F.Cu");
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
#[apply(test_master)]
|
#[apply(test_master)]
|
||||||
|
|
@ -187,7 +208,7 @@ fn autoroute_vga_dac_breakout(variant: &str) {
|
||||||
common::load_design("tests/single_layer/vga_dac_breakout/vga_dac_breakout.dsn");
|
common::load_design("tests/single_layer/vga_dac_breakout/vga_dac_breakout.dsn");
|
||||||
common::assert_navnode_count(&mut autorouter, "J1-2", "R4-1", 272);
|
common::assert_navnode_count(&mut autorouter, "J1-2", "R4-1", 272);
|
||||||
let mut invoker = common::create_invoker_and_assert(autorouter);
|
let mut invoker = common::create_invoker_and_assert(autorouter);
|
||||||
common::replay_and_assert(
|
common::replay_and_assert_and_report(
|
||||||
&mut invoker,
|
&mut invoker,
|
||||||
"tests/single_layer/vga_dac_breakout/autoroute_all.cmd",
|
"tests/single_layer/vga_dac_breakout/autoroute_all.cmd",
|
||||||
variant,
|
variant,
|
||||||
|
|
@ -195,7 +216,10 @@ fn autoroute_vga_dac_breakout(variant: &str) {
|
||||||
|
|
||||||
let (mut autorouter, ..) = invoker.dissolve();
|
let (mut autorouter, ..) = invoker.dissolve();
|
||||||
|
|
||||||
common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
|
common::assert_that_all_single_layer_groundless_ratlines_are_autorouted(
|
||||||
|
&mut autorouter,
|
||||||
|
"F.Cu",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[apply(test_master)]
|
#[apply(test_master)]
|
||||||
|
|
@ -205,7 +229,7 @@ fn autoroute_smd_non_rectangular_buck_converter(variant: &str) {
|
||||||
|
|
||||||
let mut invoker = common::create_invoker_and_assert(autorouter);
|
let mut invoker = common::create_invoker_and_assert(autorouter);
|
||||||
|
|
||||||
common::replay_and_assert(
|
common::replay_and_assert_and_report(
|
||||||
&mut invoker,
|
&mut invoker,
|
||||||
"tests/single_layer/smd_non_rectangular_buck_converter/route_all.cmd",
|
"tests/single_layer/smd_non_rectangular_buck_converter/route_all.cmd",
|
||||||
variant,
|
variant,
|
||||||
|
|
@ -213,6 +237,9 @@ fn autoroute_smd_non_rectangular_buck_converter(variant: &str) {
|
||||||
|
|
||||||
let (mut autorouter, ..) = invoker.dissolve();
|
let (mut autorouter, ..) = invoker.dissolve();
|
||||||
|
|
||||||
common::assert_single_layer_groundless_autoroute(&mut autorouter, "F.Cu");
|
common::assert_that_all_single_layer_groundless_ratlines_are_autorouted(
|
||||||
|
&mut autorouter,
|
||||||
|
"F.Cu",
|
||||||
|
);
|
||||||
//common::assert_number_of_conncomps(&mut autorouter, 16);
|
//common::assert_number_of_conncomps(&mut autorouter, 16);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue