use crate::{algorithms, Error, Graph};
use std::fmt::{Debug, Display};
use std::hash::Hash;
pub fn average_node_betweenness<T, A>(graph: &Graph<T, A>, weighted: bool) -> Result<f64, Error>
where
T: Hash + Eq + Clone + Ord + Debug + Display + Send + Sync,
A: Clone + Send + Sync,
{
let centralities =
algorithms::centrality::betweenness::betweenness_centrality(graph, weighted, false)?;
Ok(centralities.iter().map(|(_, v)| v).sum::<f64>() / graph.number_of_nodes() as f64)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::generators;
use assert_approx_eq::assert_approx_eq;
#[test]
fn test_average_node_betweenness_1() {
let graph = generators::social::karate_club_graph();
let sg = average_node_betweenness(&graph, true).unwrap();
assert_approx_eq!(sg, 26.19362745098039);
}
#[test]
fn test_average_node_betweenness_2() {
let graph = generators::social::karate_club_graph();
let sg = average_node_betweenness(&graph, false).unwrap();
assert_approx_eq!(sg, 23.23529411764705);
}
}