From be63527478c120b50c6715c3cdab7bafc6737e32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20M=C3=BCller?= Date: Tue, 12 May 2026 13:55:04 +0200 Subject: [PATCH] Add incident vertices to edges return value in make_test_graph() fixture --- src/testing/graph_topology_testing.rs | 187 ++++++++++---------------- 1 file changed, 74 insertions(+), 113 deletions(-) diff --git a/src/testing/graph_topology_testing.rs b/src/testing/graph_topology_testing.rs index 8769c53..74ffec8 100644 --- a/src/testing/graph_topology_testing.rs +++ b/src/testing/graph_topology_testing.rs @@ -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, - ::Vertex, - ::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);