~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_tsort.py

  • Committer: Robert Collins
  • Date: 2006-03-28 14:29:13 UTC
  • mto: (1626.2.1 integration)
  • mto: This revision was merged to the branch mainline in revision 1628.
  • Revision ID: robertc@robertcollins.net-20060328142913-ac5afb37075719c6
Convert log to use the new tsort.merge_sort routine.

Show diffs side-by-side

added added

removed removed

Lines of Context:
88
88
 
89
89
class MergeSortTests(TestCase):
90
90
 
91
 
    def assertSortAndIterate(self, graph, branch_tip, result_list):
 
91
    def assertSortAndIterate(self, graph, branch_tip, result_list,
 
92
            mainline_revisions=None):
92
93
        """Check that merge based sorting and iter_topo_order on graph works."""
93
 
        self.assertEquals(result_list, merge_sort(graph, branch_tip))
 
94
        self.assertEquals(result_list,
 
95
            merge_sort(graph, branch_tip, mainline_revisions=mainline_revisions))
94
96
        self.assertEqual(result_list,
95
 
                         list(MergeSorter(graph, branch_tip).iter_topo_order()))
 
97
            list(MergeSorter(
 
98
                graph,
 
99
                branch_tip,
 
100
                mainline_revisions=mainline_revisions).iter_topo_order()))
96
101
 
97
102
    def test_merge_sort_empty(self):
98
103
        # sorting of an emptygraph does not error
219
224
             (7, 'H', 0, True),
220
225
             ]
221
226
            )
 
227
 
 
228
    def test_mainline_revs_partial(self):
 
229
        # when a mainline_revisions list is passed this must
 
230
        # override the graphs idea of mainline, and must also
 
231
        # truncate the output to the specified range, if needed.
 
232
        # so we test both at once: a mainline_revisions list that
 
233
        # disagrees with the graph about which revs are 'mainline'
 
234
        # and also truncates the output.
 
235
        # graph:
 
236
        # A 0 [E, B]
 
237
        # B 1 [D, C]
 
238
        # C 2 [D]
 
239
        # D 1 [E]
 
240
        # E 0
 
241
        # with a mainline of NONE,E,A (the inferred one) this will show the merge
 
242
        # depths above.
 
243
        # with a overriden mainline of NONE,E,D,B,A it should show:
 
244
        # A 0
 
245
        # B 0
 
246
        # C 1
 
247
        # D 0
 
248
        # E 0
 
249
        # and thus when truncated to D,B,A it should show
 
250
        # A 0
 
251
        # B 0
 
252
        # C 1 
 
253
        # because C is brought in by B in this view and D
 
254
        # is the terminating revision id
 
255
        self.assertSortAndIterate(
 
256
            {'A': ['E', 'B'],
 
257
             'B': ['D', 'C'],
 
258
             'C': ['D'],
 
259
             'D': ['E'],
 
260
             'E': []
 
261
             },
 
262
            'A',
 
263
            [(0, 'A', 0, False),
 
264
             (1, 'B', 0, False),
 
265
             (2, 'C', 1, True),
 
266
             ],
 
267
            mainline_revisions=['D', 'B', 'A']
 
268
            )
 
269
 
 
270
    def test_mainline_revs_with_none(self):
 
271
        # a simple test to ensure that a mainline_revs
 
272
        # list which goes all the way to None works
 
273
        self.assertSortAndIterate(
 
274
            {'A': [],
 
275
             },
 
276
            'A',
 
277
            [(0, 'A', 0, True),
 
278
             ],
 
279
            mainline_revisions=[None, 'A']
 
280
            )
 
281