Add incident vertices to edges return value in make_test_graph() fixture

This commit is contained in:
2026-05-12 13:55:04 +02:00
parent ac688b4fc0
commit be63527478
+74 -113
View File
@@ -5,7 +5,11 @@ macro_rules! graph_topology_test_fixtures {
fn make_test_graph() -> (
$T,
[<$T as $crate::traits::GraphTopology>::Vertex; 10],
[<$T as $crate::traits::GraphTopology>::Edge; 18],
[(
<$T as $crate::traits::GraphTopology>::Edge,
<$T as $crate::traits::GraphTopology>::Vertex,
<$T as $crate::traits::GraphTopology>::Vertex,
); 18],
[Vec<(
<$T as $crate::traits::GraphTopology>::Vertex,
<$T as $crate::traits::GraphTopology>::Edge,
@@ -15,69 +19,70 @@ macro_rules! graph_topology_test_fixtures {
let vertices: [<$T as $crate::traits::GraphTopology>::Vertex; 10] =
core::array::from_fn(|_| graph.add_vertex());
let edges = [
graph.add_edge(vertices[0], vertices[1]),
graph.add_edge(vertices[0], vertices[1]),
graph.add_edge(vertices[1], vertices[2]),
graph.add_edge(vertices[1], vertices[3]),
graph.add_edge(vertices[1], vertices[4]),
graph.add_edge(vertices[2], vertices[2]),
graph.add_edge(vertices[2], vertices[4]),
graph.add_edge(vertices[2], vertices[4]),
graph.add_edge(vertices[2], vertices[5]),
graph.add_edge(vertices[2], vertices[6]),
graph.add_edge(vertices[3], vertices[6]),
graph.add_edge(vertices[4], vertices[4]),
graph.add_edge(vertices[4], vertices[7]),
graph.add_edge(vertices[4], vertices[8]),
graph.add_edge(vertices[5], vertices[9]),
graph.add_edge(vertices[6], vertices[9]),
graph.add_edge(vertices[7], vertices[8]),
graph.add_edge(vertices[7], vertices[9]),
];
(vertices[0], vertices[1]),
(vertices[0], vertices[1]),
(vertices[1], vertices[2]),
(vertices[1], vertices[3]),
(vertices[1], vertices[4]),
(vertices[2], vertices[2]),
(vertices[2], vertices[4]),
(vertices[2], vertices[4]),
(vertices[2], vertices[5]),
(vertices[2], vertices[6]),
(vertices[3], vertices[6]),
(vertices[4], vertices[4]),
(vertices[4], vertices[7]),
(vertices[4], vertices[8]),
(vertices[5], vertices[9]),
(vertices[6], vertices[9]),
(vertices[7], vertices[8]),
(vertices[7], vertices[9]),
]
.map(|(v1, v2)| (graph.add_edge(v1, v2), v1, v2));
let incidences: [Vec<_>; 10] = [
vec![(vertices[1], edges[0]), (vertices[1], edges[1])],
vec![(vertices[1], edges[0].0), (vertices[1], edges[1].0)],
vec![
(vertices[0], edges[0]),
(vertices[0], edges[1]),
(vertices[2], edges[2]),
(vertices[3], edges[3]),
(vertices[4], edges[4]),
(vertices[0], edges[0].0),
(vertices[0], edges[1].0),
(vertices[2], edges[2].0),
(vertices[3], edges[3].0),
(vertices[4], edges[4].0),
],
vec![
(vertices[2], edges[5]),
(vertices[2], edges[5]),
(vertices[1], edges[2]),
(vertices[4], edges[6]),
(vertices[4], edges[7]),
(vertices[5], edges[8]),
(vertices[6], edges[9]),
(vertices[2], edges[5].0),
(vertices[2], edges[5].0),
(vertices[1], edges[2].0),
(vertices[4], edges[6].0),
(vertices[4], edges[7].0),
(vertices[5], edges[8].0),
(vertices[6], edges[9].0),
],
vec![(vertices[1], edges[3]), (vertices[6], edges[10])],
vec![(vertices[1], edges[3].0), (vertices[6], edges[10].0)],
vec![
(vertices[1], edges[4]),
(vertices[2], edges[6]),
(vertices[2], edges[7]),
(vertices[4], edges[11]),
(vertices[4], edges[11]),
(vertices[7], edges[12]),
(vertices[8], edges[13]),
(vertices[1], edges[4].0),
(vertices[2], edges[6].0),
(vertices[2], edges[7].0),
(vertices[4], edges[11].0),
(vertices[4], edges[11].0),
(vertices[7], edges[12].0),
(vertices[8], edges[13].0),
],
vec![(vertices[2], edges[8]), (vertices[9], edges[14])],
vec![(vertices[2], edges[8].0), (vertices[9], edges[14].0)],
vec![
(vertices[2], edges[9]),
(vertices[3], edges[10]),
(vertices[9], edges[15]),
(vertices[2], edges[9].0),
(vertices[3], edges[10].0),
(vertices[9], edges[15].0),
],
vec![
(vertices[4], edges[12]),
(vertices[8], edges[16]),
(vertices[9], edges[17]),
(vertices[4], edges[12].0),
(vertices[8], edges[16].0),
(vertices[9], edges[17].0),
],
vec![(vertices[4], edges[13]), (vertices[7], edges[16])],
vec![(vertices[4], edges[13].0), (vertices[7], edges[16].0)],
vec![
(vertices[5], edges[14]),
(vertices[6], edges[15]),
(vertices[7], edges[17]),
(vertices[5], edges[14].0),
(vertices[6], edges[15].0),
(vertices[7], edges[17].0),
],
];
(graph, vertices, edges, incidences)
@@ -412,33 +417,12 @@ macro_rules! graph_topology_tests {
#[test]
fn incident_vertices() {
let (graph, vertices, edges, _) = make_test_graph();
let expected: [(<$T as $crate::traits::GraphTopology>::Vertex, <$T as $crate::traits::GraphTopology>::Vertex); 18] = [
(vertices[0], vertices[1]),
(vertices[0], vertices[1]),
(vertices[1], vertices[2]),
(vertices[1], vertices[3]),
(vertices[1], vertices[4]),
(vertices[2], vertices[2]),
(vertices[2], vertices[4]),
(vertices[2], vertices[4]),
(vertices[2], vertices[5]),
(vertices[2], vertices[6]),
(vertices[3], vertices[6]),
(vertices[4], vertices[4]),
(vertices[4], vertices[7]),
(vertices[4], vertices[8]),
(vertices[5], vertices[9]),
(vertices[6], vertices[9]),
(vertices[7], vertices[8]),
(vertices[7], vertices[9]),
];
for (i, &(v1, v2)) in expected.iter().enumerate() {
let (u1, u2) = graph.incident_vertices(edges[i]);
let (graph, _, edges, _) = make_test_graph();
for &(e, v1, v2) in edges.iter() {
let (u1, u2) = graph.incident_vertices(e);
assert!(
(u1 == v1 && u2 == v2) || (u1 == v2 && u2 == v1),
"unexpected incident vertices {u1:?} and {u2:?} for edges[{i}]: edge {:?}",
edges[i]
"unexpected incident vertices {u1:?} and {u2:?} for edge {e:?}"
);
}
}
@@ -461,7 +445,7 @@ macro_rules! graph_topology_tests {
// Expects each edge to appear exactly once.
for e in graph.edges() {
assert_eq!(
edges.iter().filter(|&x| *x == e).count(),
edges.iter().filter(|&&(f, _, _)| f == e).count(),
1,
"unexpected edge {e:?} from the iterator"
);
@@ -894,37 +878,14 @@ macro_rules! graph_topology_deletion_tests {
#[test]
fn incident_vertices_after_delete_edge() {
let (mut graph, vertices, edges, _) = make_test_graph();
graph.delete_edge(edges[2]);
let expected: [(
usize,
<Graph as $crate::traits::GraphTopology>::Vertex,
<Graph as $crate::traits::GraphTopology>::Vertex,
); 17] = [
(0, vertices[0], vertices[1]),
(1, vertices[0], vertices[1]),
(3, vertices[1], vertices[3]),
(4, vertices[1], vertices[4]),
(5, vertices[2], vertices[2]),
(6, vertices[2], vertices[4]),
(7, vertices[2], vertices[4]),
(8, vertices[2], vertices[5]),
(9, vertices[2], vertices[6]),
(10, vertices[3], vertices[6]),
(11, vertices[4], vertices[4]),
(12, vertices[4], vertices[7]),
(13, vertices[4], vertices[8]),
(14, vertices[5], vertices[9]),
(15, vertices[6], vertices[9]),
(16, vertices[7], vertices[8]),
(17, vertices[7], vertices[9]),
];
for (i, v1, v2) in expected {
let (u1, u2) = graph.incident_vertices(edges[i]);
let (mut graph, _, edges, _) = make_test_graph();
let e = edges[2].0;
graph.delete_edge(e);
for &(f, v1, v2) in edges.iter().filter(|&&(f, _, _)| f != e) {
let (u1, u2) = graph.incident_vertices(f);
assert!(
(u1 == v1 && u2 == v2) || (u1 == v2 && u2 == v1),
"unexpected incident vertices {u1:?} and {u2:?} for edges[{i}] ({:?}) after delete",
edges[i]
"unexpected incident vertices {u1:?} and {u2:?} for edge {f:?} after delete"
);
}
}
@@ -941,16 +902,16 @@ macro_rules! graph_topology_deletion_tests {
);
for i in [2, 5, 6, 7, 8, 9] {
assert!(
!graph.edges().any(|e| e == edges[i]),
!graph.edges().any(|e| e == edges[i].0),
"deleted edge {:?} appeared in iterator",
edges[i]
edges[i].0
);
}
for i in [0, 1, 3, 4, 10, 11, 12, 13, 14, 15, 16, 17] {
assert!(
graph.edges().any(|e| e == edges[i]),
graph.edges().any(|e| e == edges[i].0),
"expected edge {:?} missing from iterator after delete",
edges[i]
edges[i].0
);
}
}
@@ -973,11 +934,11 @@ macro_rules! graph_topology_deletion_tests {
fn incidences_after_delete_edge() {
let (mut graph, vertices, edges, incidences) = make_test_graph();
// Deletes the edge from vertices[1] to vertices[2].
graph.delete_edge(edges[2]);
graph.delete_edge(edges[2].0);
for i in 0..10 {
let remaining = incidences[i]
.iter()
.filter(|(_, e)| *e != edges[2])
.filter(|(_, e)| *e != edges[2].0)
.cloned()
.collect();
assert_vertex_incidences(&graph, vertices[i], remaining);