pub mod bellman_ford;
pub mod betweenness_centrality;
pub mod bfs;
pub mod closeness_centrality;
pub mod connected_components;
pub mod dfs;
pub mod dijkstra;
pub mod louvain;
pub mod pagerank;
pub mod topological_sort;
pub use bellman_ford::BellmanFordPlugin;
pub use betweenness_centrality::BetweennessCentralityPlugin;
pub use bfs::BfsPlugin;
pub use closeness_centrality::ClosenessCentralityPlugin;
pub use connected_components::ConnectedComponentsPlugin;
pub use dfs::DfsPlugin;
pub use dijkstra::DijkstraPlugin;
pub use louvain::LouvainPlugin;
pub use pagerank::PageRankPlugin;
pub use topological_sort::TopologicalSortPlugin;
pub fn list_builtin_algorithms() -> Vec<&'static str> {
vec![
"pagerank",
"bfs",
"dfs",
"connected_components",
"dijkstra",
"bellman-ford",
"betweenness-centrality",
"closeness-centrality",
"louvain",
"topological-sort",
]
}
pub fn create_pagerank() -> PageRankPlugin {
PageRankPlugin::default()
}
pub fn create_bfs(start_node: usize) -> BfsPlugin {
BfsPlugin::new(start_node)
}
pub fn create_dfs(start_node: usize) -> DfsPlugin {
DfsPlugin::new(start_node)
}
pub fn create_connected_components() -> ConnectedComponentsPlugin {
ConnectedComponentsPlugin::new()
}
pub fn create_dijkstra_from_source(source: usize) -> DijkstraPlugin {
DijkstraPlugin::from_source(source)
}
pub fn create_bellman_ford_from_source(source: usize) -> BellmanFordPlugin {
BellmanFordPlugin::from_source(source)
}
pub fn create_betweenness_centrality_normalized() -> BetweennessCentralityPlugin {
BetweennessCentralityPlugin::normalized()
}
pub fn create_closeness_centrality_improved() -> ClosenessCentralityPlugin {
ClosenessCentralityPlugin::improved()
}
pub fn create_louvain_default() -> LouvainPlugin {
LouvainPlugin::default_params()
}
pub fn create_topological_sort() -> TopologicalSortPlugin {
TopologicalSortPlugin::new()
}
#[cfg(test)]
mod tests {
use super::*;
use crate::plugins::algorithm::GraphAlgorithm;
#[test]
fn test_list_builtin_algorithms() {
let algorithms = list_builtin_algorithms();
assert!(algorithms.contains(&"pagerank"));
assert!(algorithms.contains(&"bfs"));
assert!(algorithms.contains(&"dfs"));
assert!(algorithms.contains(&"connected_components"));
assert!(algorithms.contains(&"dijkstra"));
assert!(algorithms.contains(&"bellman-ford"));
assert!(algorithms.contains(&"betweenness-centrality"));
assert!(algorithms.contains(&"closeness-centrality"));
assert!(algorithms.contains(&"louvain"));
assert!(algorithms.contains(&"topological-sort"));
assert_eq!(algorithms.len(), 10);
}
#[test]
fn test_create_helpers() {
let pagerank = create_pagerank();
assert_eq!(pagerank.info().name, "pagerank");
let bfs = create_bfs(0);
assert_eq!(bfs.info().name, "bfs");
let dfs = create_dfs(0);
assert_eq!(dfs.info().name, "dfs");
let cc = create_connected_components();
assert_eq!(cc.info().name, "connected_components");
}
}