# HG changeset patch # User Siddharth Agarwal # Date 2012-12-11 22:47:33 # Node ID b3ba69692f8a5afddd62ec9b944c22920f161eb2 # Parent 3d1dc7aeca39446b6b2f7966e4890283f6560d63 ancestor: move missingancestors doctest out into a separate file This is in preparation for upcoming patches which will reuse the same graph for tests. diff --git a/mercurial/ancestor.py b/mercurial/ancestor.py --- a/mercurial/ancestor.py +++ b/mercurial/ancestor.py @@ -101,88 +101,6 @@ def missingancestors(revs, bases, pfunc) revs and bases should both be iterables. pfunc must return a list of parent revs for a given revs. - - graph is a dict of child->parent adjacency lists for this graph: - o 13 - | - | o 12 - | | - | | o 11 - | | |\ - | | | | o 10 - | | | | | - | o---+ | 9 - | | | | | - o | | | | 8 - / / / / - | | o | 7 - | | | | - o---+ | 6 - / / / - | | o 5 - | |/ - | o 4 - | | - o | 3 - | | - | o 2 - |/ - o 1 - | - o 0 - >>> graph = {0: [-1], 1: [0], 2: [1], 3: [1], 4: [2], 5: [4], 6: [4], - ... 7: [4], 8: [-1], 9: [6, 7], 10: [5], 11: [3, 7], 12: [9], - ... 13: [8]} - >>> pfunc = graph.get - - Empty revs - >>> missingancestors([], [1], pfunc) - [] - >>> missingancestors([], [], pfunc) - [] - - If bases is empty, it's the same as if it were [nullrev] - >>> missingancestors([12], [], pfunc) - [0, 1, 2, 4, 6, 7, 9, 12] - - Trivial case: revs == bases - >>> missingancestors([0], [0], pfunc) - [] - >>> missingancestors([4, 5, 6], [6, 5, 4], pfunc) - [] - - With nullrev - >>> missingancestors([-1], [12], pfunc) - [] - >>> missingancestors([12], [-1], pfunc) - [0, 1, 2, 4, 6, 7, 9, 12] - - 9 is a parent of 12. 7 is a parent of 9, so an ancestor of 12. 6 is an - ancestor of 12 but not of 7. - >>> missingancestors([12], [9], pfunc) - [12] - >>> missingancestors([9], [12], pfunc) - [] - >>> missingancestors([12, 9], [7], pfunc) - [6, 9, 12] - >>> missingancestors([7, 6], [12], pfunc) - [] - - More complex cases - >>> missingancestors([10], [11, 12], pfunc) - [5, 10] - >>> missingancestors([11], [10], pfunc) - [3, 7, 11] - >>> missingancestors([11], [10, 12], pfunc) - [3, 11] - >>> missingancestors([12], [10], pfunc) - [6, 7, 9, 12] - >>> missingancestors([12], [11], pfunc) - [6, 9, 12] - >>> missingancestors([10, 11, 12], [13], pfunc) - [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12] - >>> missingancestors([13], [10, 11, 12], pfunc) - [8, 13] """ revsvisit = set(revs) diff --git a/tests/test-ancestor.py b/tests/test-ancestor.py new file mode 100644 --- /dev/null +++ b/tests/test-ancestor.py @@ -0,0 +1,74 @@ +from mercurial import ancestor + +# graph is a dict of child->parent adjacency lists for this graph: +# o 13 +# | +# | o 12 +# | | +# | | o 11 +# | | |\ +# | | | | o 10 +# | | | | | +# | o---+ | 9 +# | | | | | +# o | | | | 8 +# / / / / +# | | o | 7 +# | | | | +# o---+ | 6 +# / / / +# | | o 5 +# | |/ +# | o 4 +# | | +# o | 3 +# | | +# | o 2 +# |/ +# o 1 +# | +# o 0 + +graph = {0: [-1], 1: [0], 2: [1], 3: [1], 4: [2], 5: [4], 6: [4], + 7: [4], 8: [-1], 9: [6, 7], 10: [5], 11: [3, 7], 12: [9], + 13: [8]} +pfunc = graph.get + +def runmissingancestors(revs, bases): + print "%% ancestors of %s and not of %s" % (revs, bases) + print ancestor.missingancestors(revs, bases, pfunc) + +def test_missingancestors(): + # Empty revs + runmissingancestors([], [1]) + runmissingancestors([], []) + + # If bases is empty, it's the same as if it were [nullrev] + runmissingancestors([12], []) + + # Trivial case: revs == bases + runmissingancestors([0], [0]) + runmissingancestors([4, 5, 6], [6, 5, 4]) + + # With nullrev + runmissingancestors([-1], [12]) + runmissingancestors([12], [-1]) + + # 9 is a parent of 12. 7 is a parent of 9, so an ancestor of 12. 6 is an + # ancestor of 12 but not of 7. + runmissingancestors([12], [9]) + runmissingancestors([9], [12]) + runmissingancestors([12, 9], [7]) + runmissingancestors([7, 6], [12]) + + # More complex cases + runmissingancestors([10], [11, 12]) + runmissingancestors([11], [10]) + runmissingancestors([11], [10, 12]) + runmissingancestors([12], [10]) + runmissingancestors([12], [11]) + runmissingancestors([10, 11, 12], [13]) + runmissingancestors([13], [10, 11, 12]) + +if __name__ == '__main__': + test_missingancestors() diff --git a/tests/test-ancestor.py.out b/tests/test-ancestor.py.out new file mode 100644 --- /dev/null +++ b/tests/test-ancestor.py.out @@ -0,0 +1,36 @@ +% ancestors of [] and not of [1] +[] +% ancestors of [] and not of [] +[] +% ancestors of [12] and not of [] +[0, 1, 2, 4, 6, 7, 9, 12] +% ancestors of [0] and not of [0] +[] +% ancestors of [4, 5, 6] and not of [6, 5, 4] +[] +% ancestors of [-1] and not of [12] +[] +% ancestors of [12] and not of [-1] +[0, 1, 2, 4, 6, 7, 9, 12] +% ancestors of [12] and not of [9] +[12] +% ancestors of [9] and not of [12] +[] +% ancestors of [12, 9] and not of [7] +[6, 9, 12] +% ancestors of [7, 6] and not of [12] +[] +% ancestors of [10] and not of [11, 12] +[5, 10] +% ancestors of [11] and not of [10] +[3, 7, 11] +% ancestors of [11] and not of [10, 12] +[3, 11] +% ancestors of [12] and not of [10] +[6, 7, 9, 12] +% ancestors of [12] and not of [11] +[6, 9, 12] +% ancestors of [10, 11, 12] and not of [13] +[0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12] +% ancestors of [13] and not of [10, 11, 12] +[8, 13]