def testAvoidCircularReference(self): graph = {1: set(), 2: set([1])} expected = deepcopy(graph) topo_prioritize(2, graph) self.assertEquals(graph, expected) sorted = toposort_flatten(graph) self.assertEqual(toposort_flatten(graph), [1, 2])
def testAlreadyPrioritized(self): graph = {1: set([2]), 2: set()} expected = deepcopy(graph) topo_prioritize(2, graph) self.assertEquals(graph, expected) sorted = toposort_flatten(graph) self.assertEqual(toposort_flatten(graph), [2, 1])
def testMiddle(self): # graph = {1: set(), 2: set([3]), 3: set()} expected = deepcopy(graph) expected[1].add(2) topo_prioritize(2, graph) self.assertEquals(graph, expected) self.assertEqual(toposort_flatten(graph), [3, 2, 1])
def testSimple(self): graph = {1: set(), 2: set()} expected = deepcopy(graph) expected[1].add(2) topo_prioritize(2, graph) self.assertEquals(graph, expected) sorted = toposort_flatten(graph) self.assertEqual(toposort_flatten(graph), [2, 1])
def testComplex(self): # 1, 2->3->4->5, 2->5, (6,7)->8, graph = {1: set(), 2: set([3,5]), 3: set([4]), 4: set([5]), 5: set(), 6: set([8]), 7: set([8]), 8: set(), } expected = deepcopy(graph) for i in (1,6,7,8): expected[i].add(2) topo_prioritize(2, graph) self.assertEquals(graph, expected) sorted = toposort_flatten(graph) for i in (1,6,7,8): self.assertLess(sorted.index(2), sorted.index(i)) for i in (3,4,5): self.assertLess(sorted.index(i), sorted.index(2))
def testComplex(self): # 1, 2->3->4->5, 2->5, (6,7)->8, graph = { 1: set(), 2: set([3, 5]), 3: set([4]), 4: set([5]), 5: set(), 6: set([8]), 7: set([8]), 8: set(), } expected = deepcopy(graph) for i in (1, 6, 7, 8): expected[i].add(2) topo_prioritize(2, graph) self.assertEquals(graph, expected) sorted = toposort_flatten(graph) for i in (1, 6, 7, 8): self.assertLess(sorted.index(2), sorted.index(i)) for i in (3, 4, 5): self.assertLess(sorted.index(i), sorted.index(2))