Mercurial > hg
changeset 25024:263bbed1833c
revset: test current behavior of addset class
The addset class isn't simple and it has a hidden bug that will be fixed by
future patches. So let's test the current behavior.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Mon, 30 Mar 2015 19:51:40 +0900 |
parents | 405cb38448ad |
children | 72f7f98bc5e5 |
files | mercurial/revset.py tests/test-revset.t |
diffstat | 2 files changed, 106 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revset.py Mon Apr 27 23:03:20 2015 +0900 +++ b/mercurial/revset.py Mon Mar 30 19:51:40 2015 +0900 @@ -2944,6 +2944,64 @@ If the ascending attribute is set, that means the two structures are ordered in either an ascending or descending way. Therefore, we can add them maintaining the order by iterating over both at the same time + + >>> xs = baseset([0, 3, 2]) + >>> ys = baseset([5, 2, 4]) + + >>> rs = addset(xs, ys) + >>> bool(rs), 0 in rs, 1 in rs, 5 in rs, rs.first(), rs.last() + (True, True, False, True, 0, 4) + >>> rs = addset(xs, baseset([])) + >>> bool(rs), 0 in rs, 1 in rs, rs.first(), rs.last() + (True, True, False, 0, 2) + >>> rs = addset(baseset([]), baseset([])) + >>> bool(rs), 0 in rs, rs.first(), rs.last() + (False, False, None, None) + + iterate unsorted: + >>> rs = addset(xs, ys) + >>> [x for x in rs] # without _genlist + [0, 3, 2, 5, 4] + >>> assert not rs._genlist + >>> len(rs) + 5 + >>> [x for x in rs] # with _genlist + [0, 3, 2, 5, 4] + >>> assert rs._genlist + + iterate ascending: + >>> rs = addset(xs, ys, ascending=True) + >>> [x for x in rs], [x for x in rs.fastasc()] # without _asclist + ([0, 2, 3, 4, 5], [0, 2, 3, 4, 5]) + >>> assert not rs._asclist + >>> len(rs) # BROKEN + 6 + >>> [x for x in rs], [x for x in rs.fastasc()] # BROKEN with _asclist + ([0, 2, 2, 3, 4, 5], [0, 2, 2, 3, 4, 5]) + >>> assert rs._asclist + + iterate descending: + >>> rs = addset(xs, ys, ascending=False) + >>> [x for x in rs], [x for x in rs.fastdesc()] # without _asclist + ([5, 4, 3, 2, 0], [5, 4, 3, 2, 0]) + >>> assert not rs._asclist + >>> len(rs) # BROKEN + 6 + >>> [x for x in rs], [x for x in rs.fastdesc()] # BROKEN with _asclist + ([5, 4, 3, 2, 2, 0], [5, 4, 3, 2, 2, 0]) + >>> assert rs._asclist + + iterate ascending without fastasc: + >>> rs = addset(xs, generatorset(ys), ascending=True) + >>> assert rs.fastasc is None + >>> [x for x in rs] # BROKEN + [0, 2, 2, 3, 4, 5] + + iterate descending without fastdesc: + >>> rs = addset(generatorset(xs), ys, ascending=False) + >>> assert rs.fastdesc is None + >>> [x for x in rs] # BROKEN + [5, 4, 3, 2, 2, 0] """ def __init__(self, revs1, revs2, ascending=None): self._r1 = revs1
--- a/tests/test-revset.t Mon Apr 27 23:03:20 2015 +0900 +++ b/tests/test-revset.t Mon Mar 30 19:51:40 2015 +0900 @@ -833,6 +833,54 @@ 4 5 +test that `or` operation skips duplicated revisions from right-hand side + + $ try 'reverse(1::5) or ancestors(4)' + (or + (func + ('symbol', 'reverse') + (dagrange + ('symbol', '1') + ('symbol', '5'))) + (func + ('symbol', 'ancestors') + ('symbol', '4'))) + * set: + <addset + <baseset [5, 3, 1]>, + <filteredset + <filteredset + <fullreposet+ 0:9>>>> + 5 + 3 + 1 + 0 + 2 + 4 + $ try 'sort(ancestors(4) or reverse(1::5))' + (func + ('symbol', 'sort') + (or + (func + ('symbol', 'ancestors') + ('symbol', '4')) + (func + ('symbol', 'reverse') + (dagrange + ('symbol', '1') + ('symbol', '5'))))) + * set: + <addset+ + <generatorset+>, + <filteredset + <baseset [5, 3, 1]>>> + 0 + 1 + 2 + 3 + 4 + 5 + check that conversion to only works $ try --optimize '::3 - ::1' (minus