Add incident vertices to edges return value in make_test_graph() fixture
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user