improved tests

This commit is contained in:
John Lancaster
2026-10-10 11:05:04 -05:00
parent 1d69539b9b
commit 7e8910e5ff
3 changed files with 470 additions and 0 deletions
+60
View File
@@ -348,3 +348,63 @@ class TestDAGComplexScenarios:
assert len(sub) == 2
assert set(sub["D"]) == {"E"}
assert set(sub["E"]) == {"F"}
nested = sub.subgraph("E")
assert all_nodes(nested) == {"E", "F"}
assert set(nested.reverse["E"]) == set()
nested.remove_edge("E", "F")
assert "F" in sub["E"]
assert "F" in g["E"]
@pytest.mark.parametrize(
("seeds", "reverse", "expected_nodes", "expected_edges"),
[
({"C", "D"}, False, {"C", "D", "E", "F"}, {("D", "E"), ("E", "F")}),
("D", True, {"A", "B", "D"}, {("D", "B"), ("B", "A")}),
("F", False, {"F"}, set()),
],
ids=["multiple-seeds", "reverse-extraction", "sink-only"],
)
def test_subgraph_boundaries(
self,
seeds: str | set[str],
reverse: bool,
expected_nodes: set[str],
expected_edges: set[tuple[str, str]],
) -> None:
graph = DAG[str]()
graph["A"] = "B"
graph["B"] = {"C", "D"}
graph["D"] = "E"
graph["E"] = "F"
subgraph = (graph.reverse if reverse else graph).subgraph(seeds)
assert all_nodes(subgraph) == expected_nodes
assert set(subgraph.topo_sort()) == expected_nodes
assert len(subgraph) == len(expected_edges)
assert {(source, target) for source in subgraph for target in subgraph[source]} == expected_edges
assert {
(source, target) for target in subgraph.reverse for source in subgraph.reverse[target]
} == expected_edges
def test_subgraph_preserves_callbacks_without_firing_during_extraction(self) -> None:
added: list[tuple[str, str]] = []
removed: list[tuple[str, str]] = []
graph = DAG[str]()
graph.add_edge("A", "B")
graph.on_add = lambda source, target: added.append((source, target))
graph.on_remove = lambda source, target: removed.append((source, target))
subgraph = graph.subgraph("A")
assert subgraph.on_add is graph.on_add
assert subgraph.on_remove is graph.on_remove
assert added == []
assert removed == []
subgraph["A"].add("C")
subgraph["A"].discard("B")
assert added == [("A", "C")]
assert removed == [("A", "B")]
assert set(graph["A"]) == {"B"}
assert set(graph.reverse["B"]) == {"A"}