Extracted some assert code for GraphTopology::incidences into new fn

This commit is contained in:
2026-05-12 13:39:13 +02:00
parent f45fc98afc
commit ac688b4fc0
+26 -36
View File
@@ -960,33 +960,12 @@ macro_rules! graph_topology_deletion_tests {
let (mut graph, vertices, _, incidences) = make_test_graph(); let (mut graph, vertices, _, incidences) = make_test_graph();
graph.delete_vertex(vertices[2]); graph.delete_vertex(vertices[2]);
for i in [0, 1, 3, 4, 5, 6, 7, 8, 9] { for i in [0, 1, 3, 4, 5, 6, 7, 8, 9] {
let mut remaining: Vec<_> = incidences[i] let remaining = incidences[i]
.iter() .iter()
.filter(|(v, _)| *v != vertices[2]) .filter(|(v, _)| *v != vertices[2])
.cloned() .cloned()
.collect(); .collect();
assert_eq!( assert_vertex_incidences(&graph, vertices[i], remaining);
graph.incidences(vertices[i]).count(),
remaining.len(),
"unexpected incidence count for vertex {:?} after delete",
vertices[i]
);
for incidence in graph.incidences(vertices[i]) {
let pos = remaining
.iter()
.position(|(v, e)| *v == incidence.0 && *e == incidence.1)
.expect(&format!(
"unexpected incidence {incidence:?} of vertex {:?} after delete",
vertices[i]
));
remaining.swap_remove(pos);
}
assert!(
remaining.is_empty(),
"expected incidences {:?} of vertex {:?} not matched after delete",
remaining,
vertices[i]
);
} }
} }
@@ -996,34 +975,45 @@ macro_rules! graph_topology_deletion_tests {
// Deletes the edge from vertices[1] to vertices[2]. // Deletes the edge from vertices[1] to vertices[2].
graph.delete_edge(edges[2]); graph.delete_edge(edges[2]);
for i in 0..10 { for i in 0..10 {
let mut remaining: Vec<_> = incidences[i] let remaining = incidences[i]
.iter() .iter()
.filter(|(_, e)| *e != edges[2]) .filter(|(_, e)| *e != edges[2])
.cloned() .cloned()
.collect(); .collect();
assert_vertex_incidences(&graph, vertices[i], remaining);
}
}
fn assert_vertex_incidences(
graph: &$T,
v: <$T as $crate::traits::GraphTopology>::Vertex,
mut expected: Vec<(
<$T as $crate::traits::GraphTopology>::Vertex,
<$T as $crate::traits::GraphTopology>::Edge,
)>,
) {
assert_eq!( assert_eq!(
graph.incidences(vertices[i]).count(), graph.incidences(v).count(),
remaining.len(), expected.len(),
"unexpected incidence count for vertex {:?} after delete", "unexpected incidence count for vertex {:?} after delete",
vertices[i] v
); );
for incidence in graph.incidences(vertices[i]) { for incidence in graph.incidences(v) {
let pos = remaining let pos = expected
.iter() .iter()
.position(|(v, e)| *v == incidence.0 && *e == incidence.1) .position(|(u, e)| *u == incidence.0 && *e == incidence.1)
.expect(&format!( .expect(&format!(
"unexpected incidence {incidence:?} of vertex {:?} after delete", "unexpected incidence {incidence:?} of vertex {:?} after delete",
vertices[i] v
)); ));
remaining.swap_remove(pos); expected.swap_remove(pos);
} }
assert!( assert!(
remaining.is_empty(), expected.is_empty(),
"expected incidences {:?} of vertex {:?} not matched after delete", "expected incidences {:?} of vertex {:?} not matched after delete",
remaining, expected,
vertices[i] v
); );
} }
}
}; };
} }