85
85
(8, [0, 1, 4, 5, 6])]),
86
86
[0, 1, 2, 3, 4, 5, 6, 7, 8])
89
class MergeSortTests(TestCase):
91
def assertSortAndIterate(self, graph, branch_tip, result_list):
92
"""Check that merge based sorting and iter_topo_order on graph works."""
93
self.assertEquals(result_list, merge_sort(graph, branch_tip))
94
self.assertEqual(result_list,
95
list(MergeSorter(graph, branch_tip).iter_topo_order()))
97
def test_merge_sort_empty(self):
98
# sorting of an emptygraph does not error
99
self.assertSortAndIterate({}, None, [])
101
def test_merge_sort_not_empty_no_tip(self):
102
# merge sorting of a branch starting with None should result
103
# in an empty list: no revisions are dragged in.
104
self.assertSortAndIterate({0: []}.items(), None, [])
106
def test_merge_sort_one_revision(self):
107
# sorting with one revision as the tip returns the correct fields:
108
# sequence - 0, revision id, merge depth - 0, end_of_merge
109
self.assertSortAndIterate({'id': []}.items(),
111
[(0, 'id', 0, True)])
113
def test_sequence_numbers_increase_no_merges(self):
114
# emit a few revisions with no merges to check the sequence
115
# numbering works in trivial cases
116
self.assertSortAndIterate(
127
def test_sequence_numbers_increase_with_merges(self):
128
# test that sequence numbers increase across merges
129
self.assertSortAndIterate(
132
'C': ['A', 'B']}.items(),
140
def test_merge_depth_with_nested_merges(self):
141
# the merge depth marker should reflect the depth of the revision
142
# in terms of merges out from the mainline
143
# revid, depth, parents:
152
self.assertSortAndIterate(
174
def test_end_of_merge_not_last_revision_in_branch(self):
175
# within a branch only the last revision gets an
176
# end of merge marker.
177
self.assertSortAndIterate(
187
def test_end_of_merge_multiple_revisions_merged_at_once(self):
188
# when multiple branches are merged at once, both of their
189
# branch-endpoints should be listed as end-of-merge.
190
# Also, the order of the multiple merges should be
191
# left-right shown top to bottom.
192
# * means end of merge
201
self.assertSortAndIterate(
202
{'A': ['H', 'B', 'E'],