Mercurial > hg
diff tests/test-ancestor.py @ 39536:bdb177923291
ancestor: optimize _lazyancestorsiter() for contiguous chains
If there's no revision between p1 and current, p1 must be the next revision
to visit. In this case, we can get around the overhead of heappop/push
operations. Note that this is faster than using heapreplace().
'current - p1 == 1' could be generalized as 'all(r not in seen for r in
xrange(p1, current)', but Python is too slow to do such thing.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Mon, 10 Sep 2018 21:58:59 +0900 |
parents | b9ee9c2e10dd |
children | d097dd0afc19 |
line wrap: on
line diff
--- a/tests/test-ancestor.py Mon Sep 10 21:54:40 2018 +0900 +++ b/tests/test-ancestor.py Mon Sep 10 21:58:59 2018 +0900 @@ -221,6 +221,10 @@ s = genlazyancestors([11, 13], stoprev=12, inclusive=True) printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0]) + # Contiguous chains: 5->4, 2->1 (where 1 is in seen set), 1->0 + s = genlazyancestors([10, 1], inclusive=True) + printlazyancestors(s, [2, 10, 4, 5, -1, 0, 1]) + # The C gca algorithm requires a real repo. These are textual descriptions of # DAGs that have been known to be problematic, and, optionally, known pairs # of revisions and their expected ancestor list.