The eight test files Q98 leaves open (plus test_bfs.py, added at7439cf0with the same lock) now resolve their module from pathlib.Path(__file__).resolve().parent instead of /root/.hermes/wizard-outputs/<lane>. tools/import_resolve_check.py --repo . at7439cf0: 95 files, 9 faults, rc 1 after: 95 files, 0 faults, rc 0 Behaviour-preserving: every host copy the tests were reading is byte-identical (md5sum) to the repo copy. Three absolute literals in spark/test_validator.py that the static leg does not grade (load_json(...) argument strings at pre-fix lines 12/16/25) are re-pointed too. ledger/test_scratch_manifest.py was red before any edit (str ROOT vs gen_manifest ROOT.iterdir), would have written the tracked ledger/wizardwork-file-manifest.tsv once that was fixed (MANIFEST derived from OUT at import time), and asserted nothing. It now re-points ROOT/OUT/MANIFEST, guards MANIFEST inside a tempfile.mkdtemp(), and asserts the exact manifest row. Non-vacuity: scratch/q98b/poison_probe.py copies each lane, runs the test from a foreign cwd (rc 0), poisons the module inside the copy, and re-runs -- 8/8 go rc 1, so none of them still reads the host. Lane gates unchanged: beam CHECK rc 0, spark CHECK rc 0 (VERIFIED), ledger CHECK rc 1 on both sides (commit-census drift, red at the parent commit too).
41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
import pathlib
|
|
import sys
|
|
sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent))
|
|
from bfs_shortest_path import shortest_path, shortest_distances
|
|
|
|
def test_basic():
|
|
adj = {0:[1,2],1:[3],2:[3],3:[]}
|
|
assert shortest_path(adj,0,3) in ([0,1,3],[0,2,3])
|
|
assert shortest_distances(adj,0) == {0:0,1:1,2:1,3:2}
|
|
|
|
def test_same():
|
|
adj = {5:[]}
|
|
assert shortest_path(adj,5,5) == [5]
|
|
|
|
def test_unreachable():
|
|
adj = {0:[1],2:[]}
|
|
assert shortest_path(adj,0,2) is None
|
|
|
|
def test_unknown_vertex():
|
|
adj = {0:[1]}
|
|
assert shortest_path(adj,0,99) is None
|
|
assert shortest_path(adj,99,0) is None
|
|
|
|
def test_empty_graph():
|
|
adj = {}
|
|
assert shortest_path(adj,1,1) is None # vertex not present
|
|
assert shortest_distances(adj,1) == {1:0} # isolated allowed for distances? spec: yes if src given
|
|
|
|
def test_directed():
|
|
adj = {0:[1],1:[]}
|
|
assert shortest_path(adj,1,0) is None
|
|
|
|
def test_path_reconstruction_long():
|
|
adj = {i:[i+1] for i in range(5)}
|
|
assert shortest_path(adj,0,5) == [0,1,2,3,4,5]
|
|
|
|
if __name__ == "__main__":
|
|
for name in [n for n in globals() if n.startswith("test_")]:
|
|
globals()[name]()
|
|
print("ALL TESTS PASSED")
|