99
99
def test_tsort_partial(self):
100
100
"""Topological sort with partial ordering.
102
Multiple correct orderings are possible, so test for
102
Multiple correct orderings are possible, so test for
103
103
correctness, not for exact match on the resulting list.
105
105
self.assertSortAndIterateOrder([(0, []),
113
(8, [0, 1, 4, 5, 6])])
113
(8, [0, 1, 4, 5, 6])])
115
115
def test_tsort_unincluded_parent(self):
116
116
"""Sort nodes, but don't include some parents in the output"""
117
117
self.assertSortAndIterate([(0, [1]),
122
122
class MergeSortTests(TestCase):
124
124
def assertSortAndIterate(self, graph, branch_tip, result_list,
125
generate_revno, mainline_revisions=None):
126
"""Check that merge based sorting and iter_topo_order on graph works."""
125
generate_revno, mainline_revisions=None):
126
"""Check that merge based sort and iter_topo_order on graph works."""
127
127
value = merge_sort(graph, branch_tip,
128
128
mainline_revisions=mainline_revisions,
129
129
generate_revno=generate_revno)
233
233
self.assertSortAndIterate(graph, 'F',
234
[(0, 'F', 0, (3,), False),
235
(1, 'D', 1, (2, 2, 1), False),
236
(2, 'C', 2, (2, 1, 1), True),
237
(3, 'B', 0, (2,), False),
238
(4, 'A', 0, (1,), True),
234
[(0, 'F', 0, (3,), False),
235
(1, 'D', 1, (2, 2, 1), False),
236
(2, 'C', 2, (2, 1, 1), True),
237
(3, 'B', 0, (2,), False),
238
(4, 'A', 0, (1,), True),
256
256
self.assertSortAndIterate(graph, 'F',
257
[(0, 'F', 0, (3,), False),
258
(1, 'D', 1, (2, 1, 2), False),
259
(2, 'C', 2, (2, 2, 1), True),
260
(3, 'X', 1, (2, 1, 1), True),
261
(4, 'B', 0, (2,), False),
262
(5, 'A', 0, (1,), True),
257
[(0, 'F', 0, (3,), False),
258
(1, 'D', 1, (2, 1, 2), False),
259
(2, 'C', 2, (2, 2, 1), True),
260
(3, 'X', 1, (2, 1, 1), True),
261
(4, 'B', 0, (2,), False),
262
(5, 'A', 0, (1,), True),
265
265
def test_merge_depth_with_nested_merges(self):
266
266
# the merge depth marker should reflect the depth of the revision
310
[(0, 'A', 0, (3,), False),
310
[(0, 'A', 0, (3,), False),
311
311
(1, 'B', 1, (1, 3, 2), False),
312
312
(2, 'C', 1, (1, 3, 1), True),
313
313
(3, 'D', 0, (2,), False),
357
357
(8, 'C', 1, (1, 1, 1), True),
358
358
(9, 'D', 0, (3,), False),
359
359
(10, 'B', 0, (2,), False),
360
(11, 'A', 0, (1,), True),
360
(11, 'A', 0, (1,), True),
393
393
(10, 'C', 1, (1, 1, 1), True),
394
394
(11, 'D', 0, (3,), False),
395
395
(12, 'B', 0, (2,), False),
396
(13, 'A', 0, (1,), True),
396
(13, 'A', 0, (1,), True),
675
[( 0, 'R', 0, (6,), False),
676
( 1, 'Q', 1, (0, 4, 5), False),
677
( 2, 'P', 2, (0, 6, 1), True),
678
( 3, 'O', 1, (0, 4, 4), False),
679
( 4, 'N', 1, (0, 4, 3), False),
680
( 5, 'M', 2, (0, 5, 1), True),
681
( 6, 'L', 1, (0, 4, 2), False),
682
( 7, 'K', 1, (0, 4, 1), True),
683
( 8, 'J', 0, (5,), False),
684
( 9, 'I', 1, (0, 3, 1), True),
675
[(0, 'R', 0, (6,), False),
676
(1, 'Q', 1, (0, 4, 5), False),
677
(2, 'P', 2, (0, 6, 1), True),
678
(3, 'O', 1, (0, 4, 4), False),
679
(4, 'N', 1, (0, 4, 3), False),
680
(5, 'M', 2, (0, 5, 1), True),
681
(6, 'L', 1, (0, 4, 2), False),
682
(7, 'K', 1, (0, 4, 1), True),
683
(8, 'J', 0, (5,), False),
684
(9, 'I', 1, (0, 3, 1), True),
685
685
(10, 'H', 0, (4,), False),
686
686
(11, 'G', 1, (0, 1, 3), False),
687
687
(12, 'F', 2, (0, 2, 1), True),