Add GraphTopologyAddition trait from GraphTopology

Move capacity and add methods from GraphTopology trait to new GraphTopologyAddition trait
This commit is contained in:
2026-08-06 14:17:21 +02:00
parent 2851cf60fd
commit 10d0c382cc
10 changed files with 75 additions and 63 deletions
+4 -4
View File
@@ -4,7 +4,7 @@ macro_rules! bfs_tests {
($T:ty) => {
#[test]
fn bfs_single_vertex() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
let result = $crate::algorithms::bfs(&graph, v);
@@ -54,7 +54,7 @@ macro_rules! bfs_tests {
#[test]
fn bfs_distances_single_vertex() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
let distances = $crate::algorithms::bfs_distances(&graph, v);
@@ -91,7 +91,7 @@ macro_rules! bfs_tests {
#[test]
fn bfs_find_source() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
assert_eq!(
@@ -139,7 +139,7 @@ macro_rules! bfs_tests {
#[test]
fn bfs_find_where_source_matches() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
assert_eq!(
+7 -7
View File
@@ -4,7 +4,7 @@ macro_rules! dfs_tests {
($T:ty) => {
#[test]
fn dfs_single_vertex() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
let result = $crate::algorithms::dfs(&graph, v);
@@ -49,7 +49,7 @@ macro_rules! dfs_tests {
#[test]
fn dfs_visited_single_vertex() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
let visited = $crate::algorithms::dfs_visited(&graph, v);
@@ -78,7 +78,7 @@ macro_rules! dfs_tests {
#[test]
fn dfs_find_source() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
assert!(
@@ -111,7 +111,7 @@ macro_rules! dfs_tests {
#[test]
fn dfs_find_where_source_matches() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
assert_eq!(
@@ -205,7 +205,7 @@ macro_rules! dfs_tests {
#[test]
fn dfs_find_path_source_equals_target() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
assert_eq!(
@@ -227,7 +227,7 @@ macro_rules! dfs_tests {
#[test]
fn dfs_find_path_adjacent() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v1 = graph.add_vertex();
let v2 = graph.add_vertex();
@@ -255,7 +255,7 @@ macro_rules! dfs_tests {
#[test]
fn dfs_find_path_where_source_matches() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
assert_eq!(
+4 -4
View File
@@ -4,7 +4,7 @@ macro_rules! dijkstra_tests {
($T:ty) => {
#[test]
fn dijkstra_single_vertex() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
let result = $crate::algorithms::dijkstra(&graph, v, |_| {
@@ -25,7 +25,7 @@ macro_rules! dijkstra_tests {
#[test]
fn dijkstra_zero_weight_loop() {
use $crate::traits::GraphTopology;
use $crate::traits::{GraphTopology, GraphTopologyAddition};
let mut graph = <$T>::new();
let vertices: [<$T as $crate::traits::GraphTopology>::Vertex; 3] =
core::array::from_fn(|_| graph.add_vertex());
@@ -71,7 +71,7 @@ macro_rules! dijkstra_tests {
#[test]
fn dijkstra_unweighted_single_vertex() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
let result = $crate::algorithms::dijkstra_unweighted(&graph, v);
@@ -95,7 +95,7 @@ macro_rules! dijkstra_tests {
#[test]
fn dijkstra_distances_unweighted_single_vertex() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
let distances = $crate::algorithms::dijkstra_distances_unweighted(&graph, v);
+6 -6
View File
@@ -15,7 +15,7 @@ macro_rules! graph_topology_test_fixtures {
<$T as $crate::traits::GraphTopology>::Edge,
>>; 10],
) {
use $crate::traits::{GraphTopology, Incidence};
use $crate::traits::{GraphTopology, GraphTopologyAddition, Incidence};
let mut graph = <$T>::new();
let vertices: [<$T as $crate::traits::GraphTopology>::Vertex; 10] =
core::array::from_fn(|_| graph.add_vertex());
@@ -96,7 +96,7 @@ macro_rules! graph_topology_test_fixtures {
#[allow(dead_code)]
fn make_test_graph_disconnected()
-> ($T, [<$T as $crate::traits::GraphTopology>::Vertex; 3]) {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let vertices: [<$T as $crate::traits::GraphTopology>::Vertex; 3] =
core::array::from_fn(|_| graph.add_vertex());
@@ -112,7 +112,7 @@ macro_rules! graph_topology_tests {
($T:ty) => {
#[test]
fn add_vertex() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v = graph.add_vertex();
assert_ne!(graph.add_vertex(), v, "unexpected duplicate vertex");
@@ -147,7 +147,7 @@ macro_rules! graph_topology_tests {
#[test]
fn add_edge() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
let mut graph = <$T>::new();
let v1 = graph.add_vertex();
let v2 = graph.add_vertex();
@@ -974,7 +974,7 @@ macro_rules! graph_topology_deletion_tests {
#[test]
fn delete_vertex_invalid_index() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
use $crate::traits::GraphTopologyDeletion;
let mut graph = Graph::new();
let v = graph.add_vertex();
@@ -1169,7 +1169,7 @@ macro_rules! graph_topology_deletion_tests {
#[test]
fn delete_edge_invalid_index() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyAddition;
use $crate::traits::GraphTopologyDeletion;
let mut graph = Graph::new();
let v1 = graph.add_vertex();
+8 -10
View File
@@ -4,7 +4,7 @@ macro_rules! entity_map_tests {
($T:ty) => {
#[test]
fn initial_values_are_default() {
use $crate::traits::GraphTopology;
use $crate::traits::{GraphTopology, GraphTopologyAddition};
let mut graph = <$T>::new();
let v1 = graph.add_vertex();
let v2 = graph.add_vertex();
@@ -15,7 +15,7 @@ macro_rules! entity_map_tests {
#[test]
fn write_and_read() {
use $crate::traits::GraphTopology;
use $crate::traits::{GraphTopology, GraphTopologyAddition};
let mut graph = <$T>::new();
let v1 = graph.add_vertex();
let v2 = graph.add_vertex();
@@ -27,7 +27,7 @@ macro_rules! entity_map_tests {
#[test]
fn lazy_growth_on_read() {
use $crate::traits::GraphTopology;
use $crate::traits::{GraphTopology, GraphTopologyAddition};
let mut graph = <$T>::new();
graph.add_vertex();
let map = graph.vertex_map(99);
@@ -37,7 +37,7 @@ macro_rules! entity_map_tests {
#[test]
fn lazy_growth_on_write() {
use $crate::traits::GraphTopology;
use $crate::traits::{GraphTopology, GraphTopologyAddition};
let mut graph = <$T>::new();
let v1 = graph.add_vertex();
let mut map = graph.vertex_map(0);
@@ -49,7 +49,7 @@ macro_rules! entity_map_tests {
#[test]
fn expand_to_new_vertices() {
use $crate::traits::GraphTopology;
use $crate::traits::{GraphTopology, GraphTopologyAddition};
let mut graph = <$T>::new();
graph.add_vertex();
let mut map = graph.vertex_map(42);
@@ -67,7 +67,7 @@ macro_rules! entity_map_tests {
#[test]
fn expand_does_not_overwrite_existing_values() {
use $crate::traits::GraphTopology;
use $crate::traits::{GraphTopology, GraphTopologyAddition};
let mut graph = <$T>::new();
let v = graph.add_vertex();
let mut map = graph.vertex_map(0);
@@ -85,8 +85,7 @@ macro_rules! entity_map_deletion_tests {
($T:ty) => {
#[test]
fn surviving_vertex_readable_after_delete() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyDeletion;
use $crate::traits::{GraphTopology, GraphTopologyAddition, GraphTopologyDeletion};
let mut graph = <$T>::new();
let v1 = graph.add_vertex();
let v2 = graph.add_vertex();
@@ -99,8 +98,7 @@ macro_rules! entity_map_deletion_tests {
#[test]
fn reused_slot_returns_old_value() {
use $crate::traits::GraphTopology;
use $crate::traits::GraphTopologyDeletion;
use $crate::traits::{GraphTopology, GraphTopologyAddition, GraphTopologyDeletion};
let mut graph = <$T>::new();
graph.add_vertex();
let v1 = graph.add_vertex();