use petgraph::operator::complement; use petgraph::prelude::*; use petgraph::Graph; #[test] fn test_complement() { let mut graph: Graph<(), (), Directed> = Graph::new(); let a = graph.add_node(()); let b = graph.add_node(()); let c = graph.add_node(()); let d = graph.add_node(()); graph.extend_with_edges(&[(a, b), (b, c), (c, d)]); let mut output: Graph<(), (), Directed> = Graph::new(); complement(&graph, &mut output, ()); let mut expected_res: Graph<(), (), Directed> = Graph::new(); let a = expected_res.add_node(()); let b = expected_res.add_node(()); let c = expected_res.add_node(()); let d = expected_res.add_node(()); expected_res.extend_with_edges(&[ (a, c), (a, d), (b, a), (b, d), (c, a), (c, b), (d, a), (d, b), (d, c), ]); for x in graph.node_indices() { for y in graph.node_indices() { assert_eq!(output.contains_edge(x, y), expected_res.contains_edge(x, y)); } } }