1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
from __future__ import annotations
from collections import OrderedDict
import pytest
from tox.util.graph import stable_topological_sort
def test_topological_order_empty() -> None:
graph: dict[str, set[str]] = OrderedDict()
result = stable_topological_sort(graph)
assert result == []
def test_topological_order_specified_only() -> None:
graph: dict[str, set[str]] = OrderedDict()
graph["A"] = {"B", "C"}
result = stable_topological_sort(graph)
assert result == ["A"]
def test_topological_order() -> None:
graph: dict[str, set[str]] = OrderedDict()
graph["A"] = {"B", "C"}
graph["B"] = set()
graph["C"] = set()
result = stable_topological_sort(graph)
assert result == ["B", "C", "A"]
def test_topological_order_cycle() -> None:
graph: dict[str, set[str]] = OrderedDict()
graph["A"] = {"B", "C"}
graph["B"] = {"A"}
with pytest.raises(ValueError, match=r"^A \| B$"):
stable_topological_sort(graph)
def test_topological_complex() -> None:
graph: dict[str, set[str]] = OrderedDict()
graph["A"] = {"B", "C"}
graph["B"] = {"C", "D"}
graph["C"] = {"D"}
graph["D"] = set()
result = stable_topological_sort(graph)
assert result == ["D", "C", "B", "A"]
def test_two_sub_graph() -> None:
graph: dict[str, set[str]] = OrderedDict()
graph["F"] = set()
graph["E"] = set()
graph["D"] = {"E", "F"}
graph["A"] = {"B", "C"}
graph["B"] = set()
graph["C"] = set()
result = stable_topological_sort(graph)
assert result == ["F", "E", "D", "B", "C", "A"]
def test_two_sub_graph_circle() -> None:
graph: dict[str, set[str]] = OrderedDict()
graph["F"] = set()
graph["E"] = set()
graph["D"] = {"E", "F"}
graph["A"] = {"B", "C"}
graph["B"] = {"A"}
graph["C"] = set()
with pytest.raises(ValueError, match=r"^A \| B$"):
stable_topological_sort(graph)
|