From feaca335b11301bac4859f44c9cab0ad79c2158d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20M=C3=BCller?= Date: Tue, 5 May 2026 19:21:48 +0200 Subject: [PATCH] Add loops and multi-edges to the test graph, fix neighbors() test --- src/models/graph.rs | 1 - src/testing/graph_topology_testing.rs | 51 ++++++++++++++++++--------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/models/graph.rs b/src/models/graph.rs index 22f8dea..6a69bca 100644 --- a/src/models/graph.rs +++ b/src/models/graph.rs @@ -267,5 +267,4 @@ mod tests { graph.delete_edge(f); assert_eq!(graph.edge_count(), 0, "unexpected edge count after delete"); } - } diff --git a/src/testing/graph_topology_testing.rs b/src/testing/graph_topology_testing.rs index ad29576..1e09b5f 100644 --- a/src/testing/graph_topology_testing.rs +++ b/src/testing/graph_topology_testing.rs @@ -7,13 +7,17 @@ macro_rules! graph_topology_test_fixtures { let vertices: [<$T as $crate::traits::GraphTopology>::Vertex; 10] = core::array::from_fn(|_| graph.add_vertex()); 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]); @@ -66,7 +70,7 @@ macro_rules! graph_topology_tests { #[test] fn edge_count() { let (graph, _) = make_test_graph(); - assert_eq!(graph.edge_count(), 14, "unexpected edge count"); + assert_eq!(graph.edge_count(), 18, "unexpected edge count"); } #[test] @@ -79,7 +83,7 @@ macro_rules! graph_topology_tests { #[test] fn degree() { let (graph, vertices) = make_test_graph(); - let expected_degrees = [1, 4, 4, 2, 4, 2, 3, 3, 2, 3]; + let expected_degrees = [2, 5, 7, 2, 7, 2, 3, 3, 2, 3]; for i in 0..graph.vertex_count() { assert_eq!( graph.degree(vertices[i]), @@ -136,8 +140,7 @@ macro_rules! graph_topology_tests { for i in 0..graph.vertex_count() { let exp = match i { - 2 => continue, - 1 | 4 | 5 | 6 => true, + 1 | 2 | 4 | 5 | 6 => true, _ => false, }; assert_eq!( @@ -199,20 +202,35 @@ macro_rules! graph_topology_tests { // Checks neighbors of vertex 4. assert_eq!( graph.neighbors(vertices[4]).count(), - 4, + 7, "unexpected neighbor count" ); - - // Expects each neighbor to appear exactly once. This will not work if there are multiple edges. - let neighbors = vec![vertices[1], vertices[2], vertices[7], vertices[8]]; + let mut expected_neighbors = vec![ + vertices[1], + vertices[2], + vertices[2], + vertices[4], + vertices[4], + vertices[7], + vertices[8], + ]; for v in graph.neighbors(vertices[4]) { - assert_eq!( - neighbors.iter().filter(|&x| *x == v).count(), - 1, - "unexpected neighbor {v:?} of {:?} from the iterator", - vertices[4] - ); + let i = expected_neighbors + .iter() + .position(|w| *w == v) + .expect(&format!( + "unexpected neighbor {v:?} of {:?} from the iterator", + vertices[4] + )); + expected_neighbors.swap_remove(i); } + assert_eq!( + expected_neighbors.len(), + 0, + "expected neighbors {:?} of {:?} were not matched by the iterator", + expected_neighbors, + vertices[4] + ); } #[test] @@ -359,7 +377,7 @@ macro_rules! graph_topology_deletion_tests { ); assert_eq!( graph.edge_count(), - 14, + 18, "unexpected edge count before delete" ); graph.delete_vertex(vertices[2]); @@ -368,12 +386,13 @@ macro_rules! graph_topology_deletion_tests { 9, "unexpected vertex count after delete" ); - assert_eq!(graph.edge_count(), 10, "unexpected edge count after delete"); + assert_eq!(graph.edge_count(), 12, "unexpected edge count after delete"); let expected_edges = [ (vertices[0], vertices[1]), (vertices[1], vertices[3]), (vertices[1], vertices[4]), (vertices[3], vertices[6]), + (vertices[4], vertices[4]), (vertices[4], vertices[7]), (vertices[4], vertices[8]), (vertices[5], vertices[9]),