blob: 0aa167ff031173e4333b1bfd1db486ec90a18a33 [file] [log] [blame]
trace = stacktrace()
def test_add_edge_ok():
g = new_graph()
k1 = g.key("t1", "id1")
k2 = g.key("t1", "id2")
g.add_edge(parent = k1, child = k2)
g.add_node(k1, {})
g.add_node(k2, {})
# Can be successfully finalized.
assert.true(g.finalize() == [])
test_add_edge_ok()
def test_edge_redeclaration():
g = new_graph()
k1 = g.key("t1", "id1")
k2 = g.key("t1", "id2")
g.add_edge(parent = k1, child = k2, title = "blah")
# Redeclaring is fine.
g.add_edge(parent = k1, child = k2, title = "blah")
# Using a different title is fine too.
g.add_edge(parent = k1, child = k2, title = "zzz")
test_edge_redeclaration()
def test_cycle_detection():
g = new_graph()
edge = lambda par, ch: g.add_edge(g.key("t", par), g.key("t", ch))
edge("1", "2")
edge("2", "3")
edge("1", "3")
edge("3", "4")
assert.fails(lambda: edge("4", "1"), "introduces a cycle")
test_cycle_detection()
def test_dangling_edges():
g = new_graph()
exists = g.key("t", "exists")
g.add_node(exists, {})
miss = lambda id: g.key("t", str(id))
g.add_edge(miss(0), miss(1), title = "edge1")
g.add_edge(miss(2), exists, title = "edge2")
g.add_edge(exists, miss(3), title = "edge3")
errs = g.finalize()
assert.eq(errs, [
'relation "edge1": refers to t("0") and t("1"), neither is defined',
't("exists") in "edge2" refers to undefined t("2")',
't("exists") in "edge3" refers to undefined t("3")',
])
test_dangling_edges()