7 if __name__ == "__main__":
9 libdir = unicode(os.path.realpath(
10 os.path.join(os.path.dirname(sys.argv[0]), "..", "packages")))
12 sys.path.insert(0, libdir)
13 from kofoto.dag import *
15 PICDIR = unicode(os.path.realpath(
16 os.path.join("..", "reference_pictures", "working")))
18 class TestDAG(unittest.TestCase):
21 for x in [1, 2, 3, 4, 5, 6]:
23 for x, y in [(1, 3), (1, 4), (2, 3), (3, 5), (4, 5), (5, 6)]:
24 self.dag.connect(x, y)
30 assert sorted(list(self.dag)) == [1, 2, 3, 4, 5, 6]
32 def test_contains(self):
35 def test_negative_contains(self):
36 assert not 4711 in self.dag
38 def test_redundant_add(self):
40 assert sorted(list(self.dag)) == [1, 2, 3, 4, 5, 6]
42 def test_redundant_connect(self):
43 assert self.dag.reachable(1, 3)
44 self.dag.connect(1, 3)
45 assert self.dag.reachable(1, 3)
47 def test_connect_loop(self):
49 self.dag.connect(6, 1)
55 def test_connected(self):
56 assert self.dag.connected(1, 3)
57 assert self.dag.connected(1, 4)
58 assert not self.dag.connected(1, 2)
59 assert not self.dag.connected(1, 5)
61 def test_disconnect(self):
62 assert self.dag.reachable(1, 3)
63 self.dag.disconnect(1, 3)
64 assert not self.dag.reachable(1, 3)
66 def test_idempotent_disconnect(self):
67 self.dag.disconnect(3, 1)
68 assert self.dag.reachable(1, 3)
69 assert not self.dag.reachable(3, 1)
71 def test_getAncestors(self):
72 for x, y in [(1, [1]),
77 (6, [1, 2, 3, 4, 5, 6])]:
78 assert sorted(list(self.dag.getAncestors(x))) == sorted(y)
80 def test_getChildren(self):
81 for x, y in [(1, [3, 4]),
87 assert sorted(list(self.dag.getChildren(x))) == sorted(y)
89 def test_getDescendants(self):
90 for x, y in [(1, [1, 3, 4, 5, 6]),
96 assert sorted(list(self.dag.getDescendants(x))) == sorted(y)
98 def test_getParents(self):
105 assert sorted(list(self.dag.getParents(x))) == sorted(y)
107 def test_getRoots(self):
108 assert sorted(list(self.dag.getRoots())) == [1, 2]
110 def test_reachable(self):
111 assert self.dag.reachable(1, 3)
112 assert self.dag.reachable(1, 6)
113 assert not self.dag.reachable(1, 2)
114 assert not self.dag.reachable(1, 4711)
116 def test_remove(self):
117 assert self.dag.reachable(1, 6)
119 assert not self.dag.reachable(1, 6)
121 def test_negative_remove(self):
123 self.dag.remove(4711)
129 ######################################################################
131 if __name__ == "__main__":