From f09aa053b6b170c91885af166082238c6d6909fe Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Wed, 16 Jul 2025 22:14:22 +0200 Subject: [PATCH] test: Make tests attempt re-autoroute after undoing all --- examples/specctra.rs | 4 ++-- tests/common/mod.rs | 29 ++++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/examples/specctra.rs b/examples/specctra.rs index 7a060d9..5969be5 100644 --- a/examples/specctra.rs +++ b/examples/specctra.rs @@ -6,7 +6,7 @@ use std::fs::File; use std::io::BufReader; use topola::autorouter::invoker::Invoker; use topola::autorouter::Autorouter; -use topola::layout::LayoutEdit; +use topola::board::edit::BoardEdit; use topola::specctra::design::SpecctraDesign; fn main() -> Result<(), std::io::Error> { @@ -14,7 +14,7 @@ fn main() -> Result<(), std::io::Error> { let design_bufread = BufReader::new(design_file); let design = SpecctraDesign::load(design_bufread).unwrap(); - let board = design.make_board(&mut LayoutEdit::new()); + let board = design.make_board(&mut BoardEdit::new()); let invoker = Invoker::new(Autorouter::new(board).unwrap()); diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 8565174..0a71a2b 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -7,15 +7,14 @@ use std::{fs::File, io::BufReader}; use petgraph::{stable_graph::NodeIndex, unionfind::UnionFind, visit::NodeIndexable}; use topola::{ autorouter::{ - history::HistoryError, + history::{History, HistoryError}, invoker::{Invoker, InvokerError}, Autorouter, }, - board::{AccessMesadata, Board}, + board::{edit::BoardEdit, AccessMesadata, Board}, drawing::graph::GetMaybeNet, geometry::{shape::MeasureLength, GenericNode, GetLayer}, graph::{GetPetgraphIndex, MakeRef}, - layout::LayoutEdit, router::{navmesh::Navmesh, RouterOptions}, specctra::{design::SpecctraDesign, mesadata::SpecctraMesadata}, }; @@ -24,7 +23,7 @@ pub fn load_design(filename: &str) -> Autorouter { let design_file = File::open(filename).unwrap(); let design_bufread = BufReader::new(design_file); let design = SpecctraDesign::load(design_bufread).unwrap(); - Autorouter::new(design.make_board(&mut LayoutEdit::new())).unwrap() + Autorouter::new(design.make_board(&mut BoardEdit::new())).unwrap() } pub fn create_invoker_and_assert( @@ -46,7 +45,9 @@ pub fn create_invoker_and_assert( pub fn replay_and_assert(invoker: &mut Invoker, filename: &str) { let file = File::open(filename).unwrap(); - invoker.replay(serde_json::from_reader(file).unwrap()); + let history: History = serde_json::from_reader(file).unwrap(); + + invoker.replay(history); let prev_node_count = invoker.autorouter().board().layout().drawing().node_count(); @@ -68,6 +69,24 @@ pub fn replay_and_assert(invoker: &mut Invoker, filename: &str invoker.autorouter().board().layout().drawing().node_count(), prev_node_count, ); + + // Another sanity test: undo all, and then replay again. This protects + // against undo failing to remove something that does not cause the + // subsequent redo to fail or something that the redo restores idempotently. + + let file = File::open(filename).unwrap(); + let history: History = serde_json::from_reader(file).unwrap(); + + for _ in 0..history.done().len() { + invoker.undo().unwrap(); + } + + invoker.replay(history); + + assert_eq!( + invoker.autorouter().board().layout().drawing().node_count(), + prev_node_count, + ); } pub fn assert_navnode_count(