Extracted some assert code for GraphTopology::incidences into new fn
This commit is contained in:
@@ -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
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user