data-structures-algorithms 1.0.0

Data Structures and Algorithms in Rust!
Documentation
#[cfg(test)]
mod graph_test {
    use std::rc::Rc;
    use crate::data_structures::graph::Graph;
    use crate::data_structures::tree::TreeNode;

    #[test]
    fn test_weighted_graph() {
        let mut graph = Graph::new();

        let node_a = Rc::new(TreeNode::new("Joey"));
        let node_b = Rc::new(TreeNode::new("Dinner"));
        let node_c = Rc::new(TreeNode::new("Lunch"));

        graph.add_node(Rc::clone(&node_a));
        graph.add_node(Rc::clone(&node_b));
        graph.add_node(Rc::clone(&node_c));

        graph.add_edge(Rc::clone(&node_a), Rc::clone(&node_b), Some(5));
        graph.add_edge(Rc::clone(&node_b), Rc::clone(&node_c), None);

        assert_eq!(graph.graph[&node_a], vec![(Rc::clone(&node_b), Some(5))]);
        assert_eq!(
            graph.graph[&node_b],
            vec![(Rc::clone(&node_a), Some(5)), (Rc::clone(&node_c), None)]
        );
        assert_eq!(graph.graph[&node_c], vec![(node_b.clone(), None)]);

        graph.remove_edge(Rc::clone(&node_a), Rc::clone(&node_b));

        assert_eq!(graph.graph[&node_a], vec![]);
        assert_eq!(graph.graph[&node_b], vec![(Rc::clone(&node_c), None)]);
        assert_eq!(graph.graph[&node_c], vec![(Rc::clone(&node_b), None)]);

        graph.remove_node(Rc::clone(&node_b));

        assert_eq!(graph.graph.len(), 2);
        assert!(!graph.graph.contains_key(&node_b));
        assert_eq!(graph.graph[&node_a], vec![]);
        assert_eq!(graph.graph[&node_c], vec![]);
    }
}