test: Make tests attempt re-autoroute after undoing all

This commit is contained in:
Mikolaj Wielgus 2025-07-16 22:14:22 +02:00
parent d7129354a1
commit f09aa053b6
2 changed files with 26 additions and 7 deletions

View File

@ -6,7 +6,7 @@ use std::fs::File;
use std::io::BufReader; use std::io::BufReader;
use topola::autorouter::invoker::Invoker; use topola::autorouter::invoker::Invoker;
use topola::autorouter::Autorouter; use topola::autorouter::Autorouter;
use topola::layout::LayoutEdit; use topola::board::edit::BoardEdit;
use topola::specctra::design::SpecctraDesign; use topola::specctra::design::SpecctraDesign;
fn main() -> Result<(), std::io::Error> { 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_bufread = BufReader::new(design_file);
let design = SpecctraDesign::load(design_bufread).unwrap(); 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()); let invoker = Invoker::new(Autorouter::new(board).unwrap());

View File

@ -7,15 +7,14 @@ use std::{fs::File, io::BufReader};
use petgraph::{stable_graph::NodeIndex, unionfind::UnionFind, visit::NodeIndexable}; use petgraph::{stable_graph::NodeIndex, unionfind::UnionFind, visit::NodeIndexable};
use topola::{ use topola::{
autorouter::{ autorouter::{
history::HistoryError, history::{History, HistoryError},
invoker::{Invoker, InvokerError}, invoker::{Invoker, InvokerError},
Autorouter, Autorouter,
}, },
board::{AccessMesadata, Board}, board::{edit::BoardEdit, AccessMesadata, Board},
drawing::graph::GetMaybeNet, drawing::graph::GetMaybeNet,
geometry::{shape::MeasureLength, GenericNode, GetLayer}, geometry::{shape::MeasureLength, GenericNode, GetLayer},
graph::{GetPetgraphIndex, MakeRef}, graph::{GetPetgraphIndex, MakeRef},
layout::LayoutEdit,
router::{navmesh::Navmesh, RouterOptions}, router::{navmesh::Navmesh, RouterOptions},
specctra::{design::SpecctraDesign, mesadata::SpecctraMesadata}, specctra::{design::SpecctraDesign, mesadata::SpecctraMesadata},
}; };
@ -24,7 +23,7 @@ pub fn load_design(filename: &str) -> Autorouter<SpecctraMesadata> {
let design_file = File::open(filename).unwrap(); let design_file = File::open(filename).unwrap();
let design_bufread = BufReader::new(design_file); let design_bufread = BufReader::new(design_file);
let design = SpecctraDesign::load(design_bufread).unwrap(); 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( pub fn create_invoker_and_assert(
@ -46,7 +45,9 @@ pub fn create_invoker_and_assert(
pub fn replay_and_assert(invoker: &mut Invoker<SpecctraMesadata>, filename: &str) { pub fn replay_and_assert(invoker: &mut Invoker<SpecctraMesadata>, filename: &str) {
let file = File::open(filename).unwrap(); 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(); let prev_node_count = invoker.autorouter().board().layout().drawing().node_count();
@ -68,6 +69,24 @@ pub fn replay_and_assert(invoker: &mut Invoker<SpecctraMesadata>, filename: &str
invoker.autorouter().board().layout().drawing().node_count(), invoker.autorouter().board().layout().drawing().node_count(),
prev_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( pub fn assert_navnode_count(