// ---------------------------------------------------------------- // IMPORTS // ---------------------------------------------------------------- use rstest::fixture; use rstest::rstest; use ads2::core::utils; use ads2::graphs::graph; // ---------------------------------------------------------------- // Fixtures // ---------------------------------------------------------------- #[fixture] fn fixture_graph() -> graph::Graph { return graph::Graph::new( vec![1,2,3,4,5,6,7,8], vec![(1,2), (1, 3), (2,3), (3,4), (4, 5), (5, 6), (6, 2), (6, 7), (6, 8)] ); } // ---------------------------------------------------------------- // Test Graph // ---------------------------------------------------------------- #[test] fn test_graph_create_noerror() { let result = std::panic::catch_unwind(|| { let gph = graph::Graph::new( vec![5, 7, 8], vec![(5,7), (7, 8)] ); assert_eq!(gph.len(), 3); }); assert!(result.is_ok()); let result = std::panic::catch_unwind(|| { let gph = graph::Graph::new( vec!["5", "7", "8", "10"], vec![("5", "7"), ("7", "8")] ); assert_eq!(gph.len(), 4); }); assert!(result.is_ok()); let result = std::panic::catch_unwind(|| { let gph = graph::Graph::::new(Vec::new(), Vec::new()); assert_eq!(gph.len(), 0); }); assert!(result.is_ok()); } #[rstest] fn test_graph_subgraph(fixture_graph: graph::Graph) { let sub_gph = fixture_graph.subgraph(vec![2,4,5,6,8]); assert_eq!(utils::vec_to_set(&sub_gph.edges), utils::vec_to_set(&vec![(6,2), (4,5), (5,6), (6,8)])); } #[rstest] fn test_graph_successors_and_predecessors(fixture_graph: graph::Graph) { let u = 1; assert_eq!(utils::vec_to_set(&fixture_graph.successors(&u)), utils::vec_to_set(&vec![2, 3])); let u = 8; assert_eq!(utils::vec_to_set(&fixture_graph.successors(&u)).len(), 0); let u = 6; assert_eq!(utils::vec_to_set(&fixture_graph.successors(&u)), utils::vec_to_set(&vec![2, 7, 8])); let u = 1; assert_eq!(utils::vec_to_set(&fixture_graph.predecessors(&u)).len(), 0); let u = 8; assert_eq!(utils::vec_to_set(&fixture_graph.predecessors(&u)), utils::vec_to_set(&vec![6])); let u = 6; assert_eq!(utils::vec_to_set(&fixture_graph.predecessors(&u)), utils::vec_to_set(&vec![5])); }