from agbenchmark.utils.dependencies.graphs import is_circular def test_is_circular(): cyclic_graph = { "nodes": [ {"id": "A", "data": {"category": []}}, {"id": "B", "data": {"category": []}}, {"id": "C", "data": {"category": []}}, {"id": "D", "data": {"category": []}}, # New node ], "edges": [ {"from": "A", "to": "B"}, {"from": "B", "to": "C"}, {"from": "C", "to": "D"}, {"from": "D", "to": "A"}, # This edge creates a cycle ], } result = is_circular(cyclic_graph) assert result is not None, "Expected a cycle, but none was detected" assert all( ( (result[i], result[i + 1]) in [(x["from"], x["to"]) for x in cyclic_graph["edges"]] ) for i in range(len(result) - 1) ), "The detected cycle path is not part of the graph's edges" def test_is_not_circular(): acyclic_graph = { "nodes": [ {"id": "A", "data": {"category": []}}, {"id": "B", "data": {"category": []}}, {"id": "C", "data": {"category": []}}, {"id": "D", "data": {"category": []}}, # New node ], "edges": [ {"from": "A", "to": "B"}, {"from": "B", "to": "C"}, {"from": "C", "to": "D"}, # No back edge from D to any node, so it remains acyclic ], } assert is_circular(acyclic_graph) is None, "Detected a cycle in an acyclic graph"