Files
troupe-standup/wizard-work/beam/test_topo_levels.py
T

64 lines
1.8 KiB
Python

import sys
sys.path.insert(0, "/root/.hermes/wizard-outputs/beam")
from topo_levels import topo_levels, flatten, CycleError
def test_basic():
nodes = ["a","b","c","d"]
edges = [("a","c"),("b","c"),("c","d")]
levels = topo_levels(nodes, edges)
assert levels == [["a","b"],["c"],["d"]], levels
def test_disconnected():
nodes = [1,2,3]
assert topo_levels(nodes, []) == [[1,2,3]]
def test_cycle():
nodes = ["a","b","c"]
edges = [("a","b"),("b","c"),("c","a")]
try:
topo_levels(nodes, edges)
except CycleError as e:
assert set(e.remaining) == {"a","b","c"}
else:
raise AssertionError("expected CycleError")
def test_unknown_node():
try:
topo_levels(["a"], [("a","z")])
except KeyError:
pass
else:
raise AssertionError("expected KeyError")
def test_single_node_no_edges():
assert topo_levels(["x"], []) == [["x"]]
def test_diamond():
nodes = ["a","b","c","d"]
edges = [("a","b"),("a","c"),("b","d"),("c","d")]
levels = topo_levels(nodes, edges)
assert levels == [["a"],["b","c"],["d"]], levels
def test_determinism():
nodes = list("zyxwv")
edges = [("z","w"),("y","w")]
r1 = topo_levels(nodes, edges)
r2 = topo_levels(list(reversed(nodes)), edges)
assert r1 == r2, (r1, r2)
def test_flatten_roundtrip():
nodes = ["a","b","c","d","e"]
edges = [("a","c"),("b","c"),("c","d"),("c","e")]
levels = topo_levels(nodes, edges)
flat = flatten(levels)
assert sorted(flat) == sorted(nodes)
# every edge prerequisite before dependent
pos = {n:i for i,n in enumerate(flat)}
for u,v in edges:
assert pos[u] < pos[v]
if __name__ == "__main__":
for name in [n for n in globals() if n.startswith("test_")]:
globals()[name]()
print("ALL TESTS PASSED")