Files
grapherity/src/testing/graph_topology_deletion_conversion_testing.rs
T

56 lines
1.4 KiB
Rust

use std::fmt::Debug;
use crate::testing::fixtures;
use crate::testing::fixtures::MakeTestGraph;
use crate::traits::{GraphTopologyConversion, GraphTopologyDeletion};
#[doc(hidden)]
#[macro_export]
macro_rules! graph_topology_deletion_conversion_tests {
($T:ty, $U:ty) => {
$crate::graph_topology_deletion_conversion_tests!(@wrap $T, $U,
convert_after_deletion,
);
};
(@wrap $T:ty, $U:ty, $($name:ident),* $(,)?) => {
$(
#[test]
fn $name() {
$crate::testing::graph_topology_deletion_conversion_testing::$name::<$T, $U>();
}
)*
};
}
pub fn convert_after_deletion<G, H>()
where
G: GraphTopologyConversion,
H: MakeTestGraph + GraphTopologyDeletion,
G::Vertex: Debug,
G::Edge: Debug,
H::Vertex: Debug,
H::Edge: Debug,
{
let (mut source, vertices, edges, _) = H::standard();
// Deletes a vertex together with its incident edges, which leaves gaps in the source's slots.
let del = vertices[2];
source.delete_vertex(del);
let vertices: Vec<_> = vertices.into_iter().filter(|&v| v != del).collect();
let edges: Vec<_> = edges
.into_iter()
.filter(|&(_, u, v)| u != del && v != del)
.collect();
let (graph, iso) = G::convert(&source);
fixtures::assert_isomorphic(
&source,
&graph,
&vertices,
|v| iso.vertex(v),
&edges,
|e| iso.edge(e),
);
}