diff --git a/wizard-work/beam/verify_toposort_none.py b/wizard-work/beam/verify_toposort_none.py new file mode 100644 index 0000000..a215ff6 --- /dev/null +++ b/wizard-work/beam/verify_toposort_none.py @@ -0,0 +1,20 @@ +"""Verification artifact for toposort None-deps and one-shot materialisation.""" +import os, sys +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from toposort import topo_sort + +def gen(): + yield "b" + +# None dep cases +r = topo_sort({"a": None}) +assert r.sorted == ["a"] and r.cycle is None, r +r = topo_sort({"a": ["z"], "z": None}) +assert r.sorted == ["z", "a"] and r.cycle is None, r +r = topo_sort({"a": None, "b": ["c"], "c": ["b"]}) +assert r.sorted is None and set(r.cycle) == {"b", "c"}, r +# generator materialisation (must equal list case) +assert topo_sort({"a": gen()}).sorted == topo_sort({"a": ["b"]}).sorted == ["b", "a"] +# self-loop unchanged +assert topo_sort({"a": ["a"]}).cycle == ["a"] +print("ALL VERIFIED")