Show More
test-stabletailgraph.t
1146 lines
| 22.1 KiB
| text/troff
|
Tads3Lexer
/ tests / test-stabletailgraph.t
|
r51288 | ==================================== | ||
Test for the stabletailgraph package | ||||
==================================== | ||||
This test file contains a bunch of small test graphs with some minimal yet | ||||
non-trivial structure, on which the various stable-tail graph and stable-tail | ||||
sort functions are tested. | ||||
Each case consists of the creation of the interesting graph structure, followed | ||||
by a check, for each noteworthy node, of: | ||||
|
r51421 | - the stable-tail sort output (with the linear parts globbed), | ||
- the leap set, | ||||
- the specific leap set. | ||||
|
r51288 | |||
In the ASCII art of the diagrams, the side of the exclusive part which is | ||||
followed in priority is denoted with "<" or ">" if it is on the left or right | ||||
respectively. | ||||
The intermediary linear parts in the example graph are there to force the | ||||
exclusive part choice (made on a min rank condition). | ||||
Setup | ||||
===== | ||||
Enable the rank computation to test sorting based on the rank. | ||||
$ cat << EOF >> $HGRCPATH | ||||
> [format] | ||||
> exp-use-changelog-v2=enable-unstable-format-and-corrupt-my-data | ||||
> | ||||
> [alias] | ||||
> test-sts = debug::stable-tail-sort -T '{tags},' | ||||
|
r51421 | > test-leaps = debug::stable-tail-sort-leaps -T '{tags}' | ||
|
r51354 | > test-log = log --graph -T '{tags} rank={_fast_rank}' --rev 'tagged()' | ||
|
r51288 | > EOF | ||
Example 1: single merge node | ||||
============================ | ||||
A base case with one branchpoint "b" and one merge node "e". | ||||
The exclusive part, starting with the lowest-ranking parent "c" of "e", | ||||
appears first in stable-tail sort of "e" and "f". | ||||
# f | ||||
# | | ||||
# e | ||||
# | | ||||
# --<-- | ||||
# | | | ||||
# c d | ||||
# | | | ||||
# --+-- <- at this point, the sort of "e" is done consuming its | ||||
# | exclusive part [c] and jumps back to its other parent "d" | ||||
# b | ||||
# | | ||||
# a | ||||
$ hg init example-1 | ||||
$ cd example-1 | ||||
$ hg debugbuilddag '.:a*a:b*b:c<b+2:d*c/d:e*e:f.' | ||||
$ hg test-log | ||||
o f rank=7 | ||||
| | ||||
o e rank=6 | ||||
|\ | ||||
| o d rank=4 | ||||
|
r51354 | | : | ||
o : c rank=3 | ||||
:/ | ||||
|
r51288 | o b rank=2 | ||
| | ||||
o a rank=1 | ||||
Check the sort of the base linear case. | ||||
$ hg test-sts c | ||||
c,b,a, (no-eol) | ||||
Check the stable-tail sort of "e": "c" should come before "d". | ||||
$ hg test-sts e | ||||
e,c,d,*,b,a, (no-eol) (glob) | ||||
Check that the linear descendant of the merge inherits its sort properly. | ||||
$ hg test-sts f | ||||
f,e,c,d,*,b,a, (no-eol) (glob) | ||||
|
r51421 | Check the leaps of "e": arriving at "c", the sort continues at "d", which | ||
which breaks the child-parent chain and results in a leap. | ||||
$ hg test-leaps e | ||||
cd | ||||
Check that this leap is indeed specific to "e", i.e. that it appears in its | ||||
stable-tail sort, but not in any stable-tail sort of its ancestors. | ||||
$ hg test-leaps --specific e | ||||
Check that this leap is inherited by its direct ancestor "f". | ||||
$ hg test-leaps f | ||||
cd | ||||
Check that this leap is not classified as specific to "f", since it is specific | ||||
to "e". | ||||
$ hg test-leaps --specific f | ||||
|
r51288 | $ cd .. | ||
Example 2: nested exclusive parts, without specific leap | ||||
======================================================== | ||||
"g" is a merge node whose exclusive part contains a merge node "e". | ||||
We check that the stable-tail sort recurses properly by delegating. | ||||
Notice that parts of the sort of "e" is an infix of the sort of "g". | ||||
This is an expected property of the sort. | ||||
# g | ||||
# | | ||||
# ---<--- | ||||
# | | | ||||
# e | <- while processing the sort in the exclusive part of "g" | ||||
# | | we recursively process the exclusive part of "e" | ||||
# --<-- f | ||||
# | | | | ||||
# c d | | ||||
# | | | | ||||
# --+-- | | ||||
# | | | ||||
# b | | ||||
# | | | ||||
# ---+--- <- done with excl(g), jump to "f" | ||||
# | | ||||
# a | ||||
$ hg init example-2 | ||||
$ cd example-2 | ||||
$ hg debugbuilddag '.:a*a:b*b:c<b+2:d*c/d:e<a+6:f*e/f:g.' | ||||
$ hg test-log | ||||
o g rank=13 | ||||
|\ | ||||
| o f rank=7 | ||||
|
r51354 | | : | ||
o : e rank=6 | ||||
|
r51288 | |\ \ | ||
|
r51354 | | o : d rank=4 | ||
| : : | ||||
o : : c rank=3 | ||||
:/ / | ||||
|
r51288 | o / b rank=2 | ||
|
r51354 | :/ | ||
|
r51288 | o a rank=1 | ||
Display the sort of "e" for reference | ||||
$ hg test-sts e | ||||
e,c,d,*,b,a, (no-eol) (glob) | ||||
Check the correctness of the sort of "g", | ||||
and that a part of the sort of "e" appears as an infix. | ||||
$ hg test-sts g | ||||
g,e,c,d,*,b,f,*,a, (no-eol) (glob) | ||||
|
r51421 | Check the leaps of "e". | ||
$ hg test-leaps e | ||||
cd | ||||
$ hg test-leaps --specific e | ||||
Check that "g" inherits a leap from "e" in addition of its own. | ||||
$ hg test-leaps g | ||||
cd | ||||
bf | ||||
Check that only the additional leap of "g" is classified as specific. | ||||
$ hg test-leaps --specific g | ||||
|
r51288 | $ cd .. | ||
Example 3: shadowing of a final leap | ||||
==================================== | ||||
We have a merge "f" whose exclusive part contains a merge "d". | ||||
The inherited parent of "d" is not in the exclusive part of "f". | ||||
At the end of the exclusive part of "d", | ||||
the leap to "c" is shadowed by the leap to "e", i.e. the inherited part to "f". | ||||
Notice that emitting "c" before "e" would break the reverse topological | ||||
ordering. | ||||
# f | ||||
# | | ||||
# ---<--- | ||||
# | | | ||||
# d | | ||||
# | e | ||||
# --<-- | | ||||
# | | | | ||||
# | +---- | ||||
# b | | ||||
# | c | ||||
# | | | ||||
# --+-- <- at this point, jumping to "e", not the shadowed "c" | ||||
# | | ||||
# a | ||||
$ hg init example-3 | ||||
$ cd example-3 | ||||
$ hg debugbuilddag '.:a*a:b<a+2:c*b/c:d<c+3:e*d/e:f.' | ||||
$ hg test-log | ||||
o f rank=9 | ||||
|\ | ||||
| o e rank=6 | ||||
|
r51354 | | : | ||
o : d rank=5 | ||||
|\: | ||||
|
r51288 | | o c rank=3 | ||
|
r51354 | | : | ||
o : b rank=2 | ||||
:/ | ||||
|
r51288 | o a rank=1 | ||
Display the sort of "d" for reference: | ||||
$ hg test-sts d | ||||
d,b,c,*,a, (no-eol) (glob) | ||||
Check that we leap from "b" directly to "e" (shadowing the leap to "c"), | ||||
and that "c" is then emitted after "e" (its descendant). | ||||
$ hg test-sts f | ||||
f,d,b,e,*,c,*,a, (no-eol) (glob) | ||||
|
r51421 | Check the leaps of "d". | ||
$ hg test-leaps d | ||||
bc | ||||
$ hg test-leaps --specific d | ||||
Check thet leaps of "f", which, despite being a descendant of "f", has a | ||||
different stable-tail sort which does not reuse any leap of "d". | ||||
$ hg test-leaps f | ||||
be | ||||
$ hg test-leaps --specific f | ||||
|
r51288 | $ cd .. | ||
Example 4: skipping over nested exclusive part (entirely) | ||||
========================================================= | ||||
We have a merge "f" whose exclusive part contains a merge "d". | ||||
The exclusive part of "d" is not in the exclusive part of "f". | ||||
However, some of the inherited part of "d" is part of the exclusive part of "f" | ||||
and needs to be iterated over before leaping to the inherited part of "f". | ||||
The sort of "d" is partially reused for the ordering of the exclusive part of | ||||
"f". However the reused part is not contiguous in the sort of "d". | ||||
# f | ||||
# | | ||||
# ---<--- | ||||
# | | | ||||
# d | | ||||
# | e | ||||
# -->-- | <- in the sort of "f", we need to skip "c" and leap to the | ||||
# | | | inherited part of "d" | ||||
# | +---- | ||||
# b | | ||||
# | c | ||||
# | | | ||||
# --+-- | ||||
# | | ||||
# a | ||||
$ hg init example-4 | ||||
$ cd example-4 | ||||
$ hg debugbuilddag '.:a*a+1:b<a+1:c*b/c:d<c+4:e*d/e:f.' | ||||
$ hg test-log | ||||
o f rank=10 | ||||
|\ | ||||
| o e rank=6 | ||||
|
r51354 | | : | ||
o : d rank=5 | ||||
|\: | ||||
|
r51288 | | o c rank=2 | ||
| | | ||||
o | b rank=3 | ||||
|/ | ||||
o a rank=1 | ||||
Display the sort of "d" for reference: | ||||
$ hg test-sts d | ||||
d,c,b,*,a, (no-eol) (glob) | ||||
|
r51353 | Check that sort "f" leaps from "d" to "b": | ||
|
r51288 | |||
$ hg test-sts f | ||||
f,d,b,*,e,*,c,a, (no-eol) (glob) | ||||
|
r51421 | Check the leaps of "d". | ||
$ hg test-leaps d | ||||
cb | ||||
$ hg test-leaps --specific d | ||||
Check the leaps of "f". | ||||
$ hg test-leaps f | ||||
db | ||||
e* (glob) | ||||
$ hg test-leaps --specific f | ||||
db | ||||
|
r51288 | $ cd .. | ||
Example 5: skipping over nested exclusive part (partially) | ||||
========================================================== | ||||
We have a merge "f" whose exclusive part contains a merge "d". | ||||
Similar to example 4, but the exclusive part of "d" is only partially | ||||
contained in the inherited part of "f". | ||||
So, we need to leap in the middle of the exclusive part of "d". | ||||
# f | ||||
# | | ||||
# ---<--- | ||||
# | | | ||||
# d | | ||||
# | e | ||||
# -->-- | | ||||
# | | | | ||||
# | g | | ||||
# | | | | ||||
# | +---- <- in the sort of "f", leaping from "g" to "b" | ||||
# b | | ||||
# | c | ||||
# | | | ||||
# --+-- | ||||
# | | ||||
# a | ||||
$ hg init example-5 | ||||
$ cd example-5 | ||||
$ hg debugbuilddag '.:a*a+2:b<a+1:c+1:g*b/g:d<c+6:e*d/e:f.' | ||||
$ hg test-log | ||||
o f rank=14 | ||||
|\ | ||||
| o e rank=8 | ||||
|
r51354 | | : | ||
o : d rank=7 | ||||
|
r51288 | |\ \ | ||
|
r51354 | | o : g rank=3 | ||
| :/ | ||||
|
r51288 | | o c rank=2 | ||
| | | ||||
o | b rank=4 | ||||
|/ | ||||
o a rank=1 | ||||
Display the sort of "d" for reference: | ||||
$ hg test-sts d | ||||
d,g,c,b,*,a, (no-eol) (glob) | ||||
Check that sort "f" leaps from "g" to "b": | ||||
$ hg test-sts f | ||||
f,d,g,b,*,e,*,c,a, (no-eol) (glob) | ||||
|
r51421 | Check the leaps of "d". | ||
$ hg test-leaps d | ||||
cb | ||||
$ hg test-leaps --specific d | ||||
Check the leaps of "f". | ||||
$ hg test-leaps f | ||||
gb | ||||
e* (glob) | ||||
$ hg test-leaps --specific f | ||||
gb | ||||
|
r51288 | $ cd .. | ||
Example 6: merge in the inherited part | ||||
====================================== | ||||
Variant of example 2, but with a merge ("f") in the inherited part of "g". | ||||
"g" is a merge node whose inherited part contains a merge node "f". | ||||
We check that the stable-tail sort delegates properly after the exclusive part. | ||||
# g | ||||
# | | ||||
# ---<--- | ||||
# | | | ||||
# d f | ||||
# | | | ||||
# | ---<--- | ||||
# | | | | ||||
# | e c | ||||
# | | | | ||||
# ---+ | <- at this point, we're done (for good) with the exclusive | ||||
# | | part of "g" | ||||
# b | | ||||
# | | | ||||
# ---+--- | ||||
# | | ||||
# a | ||||
$ hg init example-6 | ||||
$ cd example-6 | ||||
$ hg debugbuilddag '.:a*a:b<a+3:c*b:d*b:e*e/c:f*d/f:g.' | ||||
$ hg test-log | ||||
o g rank=9 | ||||
|\ | ||||
| o f rank=7 | ||||
| |\ | ||||
| | o e rank=3 | ||||
| | | | ||||
o---+ d rank=3 | ||||
/ / | ||||
o | c rank=4 | ||||
|
r51354 | : | | ||
: o b rank=2 | ||||
:/ | ||||
|
r51288 | o a rank=1 | ||
Display the sort of "f" for reference: | ||||
$ hg test-sts f | ||||
f,e,b,c,*,a, (no-eol) (glob) | ||||
Check that the sort of "g" delegates to the sort of "f" after processing its | ||||
exclusive part of "g": | ||||
$ hg test-sts g | ||||
g,d,f,e,b,c,*,a, (no-eol) (glob) | ||||
|
r51421 | Check the leaps of "f". | ||
$ hg test-leaps f | ||||
bc | ||||
$ hg test-leaps --specific f | ||||
Check the leaps of "g". | ||||
$ hg test-leaps g | ||||
df | ||||
bc | ||||
$ hg test-leaps --specific g | ||||
|
r51288 | $ cd .. | ||
Example 7: postponed iteration of common exclusive ancestors | ||||
============================================================ | ||||
Sibling merges "j" and "k", with partially shared exclusive parts. | ||||
When considering the sort of "l", the iteration over this shared part cannot | ||||
happen when iterating over excl(j) and has to be postponed to excl(k). | ||||
# l | ||||
# | | ||||
# ----<---- | ||||
# | | | ||||
# j k | ||||
# | | | ||||
# -->-- --<-- | ||||
# | | | | | ||||
# g e h i | ||||
# | | | | | ||||
# | --+-- | <- at this point, for the sort of "l", the iteration on | ||||
# f | | the end of excl(j) is postponed to the iteration of | ||||
# | d | excl(k) | ||||
# | | | | ||||
# | c | | ||||
# | | | | ||||
# ---+--- | | ||||
# | | | ||||
# b | | ||||
# | | | ||||
# ----+----- | ||||
# | | ||||
# a | ||||
$ hg init example-7 | ||||
$ cd example-7 | ||||
$ hg debugbuilddag \ | ||||
> '.:a*a:b*b:c*c:d*d:e*b:f<f+3:g<d+2:h<a+6:i*e/g:j*h/i:k*j/k:l.' | ||||
$ hg test-log | ||||
o l rank=20 | ||||
|\ | ||||
| o k rank=13 | ||||
| |\ | ||||
o \ \ j rank=10 | ||||
|\ \ \ | ||||
| | | o i rank=7 | ||||
|
r51354 | | | | : | ||
| | o : h rank=6 | ||||
| | : : | ||||
| o : : g rank=6 | ||||
| : : : | ||||
| o : : f rank=3 | ||||
| | : : | ||||
o---+ : e rank=5 | ||||
|
r51288 | / / / | ||
|
r51354 | | o : d rank=4 | ||
| | : | ||||
| o : c rank=3 | ||||
|
r51288 | |/ / | ||
o / b rank=2 | ||||
|
r51354 | :/ | ||
|
r51288 | o a rank=1 | ||
Display the sort of "j" for reference: | ||||
$ hg test-sts j | ||||
j,e,d,c,g,*,f,b,a, (no-eol) (glob) | ||||
Display the sort of "k" for reference: | ||||
$ hg test-sts k | ||||
k,h,*,d,c,b,i,*,a, (no-eol) (glob) | ||||
Check that the common part of excl(j) and excl(k) is iterated over after "k": | ||||
$ hg test-sts l | ||||
l,j,e,g,*,f,k,h,*,d,c,b,i,*,a, (no-eol) (glob) | ||||
|
r51421 | Check the leaps of "j". | ||
$ hg test-leaps j | ||||
cg | ||||
$ hg test-leaps --specific j | ||||
Check the leaps of "k". | ||||
$ hg test-leaps k | ||||
bi | ||||
$ hg test-leaps --specific k | ||||
Check the leaps of "l". | ||||
$ hg test-leaps l | ||||
eg | ||||
fk | ||||
bi | ||||
$ hg test-leaps --specific l | ||||
eg | ||||
|
r51288 | $ cd .. | ||
Example 8: postponed iteration of common ancestors between parts | ||||
================================================================ | ||||
Sibling merges "g" and "i", with some part shared between the inherited part | ||||
of "g" and the exclusive part of "i". | ||||
When considering the sort of "j", the iteration over this shared part cannot | ||||
happen when iterating over inherited(g) and has to be postponed to excl(i). | ||||
# j | ||||
# | | ||||
# ----<---- | ||||
# | | | ||||
# g i | ||||
# | | | ||||
# --<-- --<-- | ||||
# | | | | | ||||
# c f | h | ||||
# | | | | | ||||
# | --+-- | <- at this point, for the sort of "j", the iteration | ||||
# | | | on the end of inherited(g) is postponed to the | ||||
# | e | iteration of excl(k) | ||||
# | | | | ||||
# ---+--- | | ||||
# b | | ||||
# | | | ||||
# ----+----- | ||||
# | | ||||
# a | ||||
$ hg init example-8 | ||||
$ cd example-8 | ||||
$ hg debugbuilddag '.:a*a:b*b:c*b:d*d:e*e:f*c/f:g<a+5:h*e/h:i*g/i:j.' | ||||
$ hg test-log | ||||
o j rank=14 | ||||
|\ | ||||
| o i rank=10 | ||||
| |\ | ||||
| | o h rank=6 | ||||
|
r51354 | | | : | ||
o | : g rank=7 | ||||
|
r51288 | |\ \ \ | ||
|
r51354 | | o | : f rank=5 | ||
|
r51288 | | |/ / | ||
|
r51354 | | o : e rank=4 | ||
| | : | ||||
| o : d rank=3 | ||||
| | : | ||||
o | : c rank=3 | ||||
|
r51288 | |/ / | ||
o / b rank=2 | ||||
|
r51354 | :/ | ||
|
r51288 | o a rank=1 | ||
Display the sort of "g" for reference: | ||||
$ hg test-sts g | ||||
g,c,f,e,d,b,a, (no-eol) | ||||
Display the sort of "i" for reference: | ||||
$ hg test-sts i | ||||
i,e,d,b,h,*,a, (no-eol) (glob) | ||||
Check that the common part of inherited(g) and excl(k) is iterated over after | ||||
"i": | ||||
$ hg test-sts j | ||||
j,g,c,f,i,e,d,b,h,*,a, (no-eol) (glob) | ||||
|
r51421 | Check the leaps of "g". | ||
$ hg test-leaps g | ||||
cf | ||||
$ hg test-leaps g | ||||
cf | ||||
Check the leaps of "i". | ||||
$ hg test-leaps i | ||||
bh | ||||
$ hg test-leaps --specific i | ||||
Check the leaps of "j". | ||||
$ hg test-leaps j | ||||
cf | ||||
fi | ||||
bh | ||||
$ hg test-leaps --specific j | ||||
|
r51288 | $ cd .. | ||
Example 9: postponed iteration of common ancestors between both parts | ||||
===================================================================== | ||||
This is a combination of example 7 and 8 at the same time. | ||||
Both excl(i) and excl(j) share a common part. | ||||
Same with inherited(i) and inherited(j). | ||||
We test that the walk on the common ancestors in both cases is properly | ||||
postponed when considering sort(k). | ||||
# k | ||||
# | | ||||
# ----<---- | ||||
# | | | ||||
# i j | ||||
# | | | ||||
# --<-- --<-- | ||||
# | | | | | ||||
# c f g h | ||||
# | | | | | ||||
# | e | | | ||||
# | | | | | ||||
# +--]|[--- | <- rest of excl(i) postponed to excl(j) | ||||
# | | | | ||||
# b ----+---- <- rest of inherited(i) postponed to inherited(j) | ||||
# | | | ||||
# | d | ||||
# | | | ||||
# ----+---- | ||||
# | | ||||
# a | ||||
$ hg init example-9 | ||||
$ cd example-9 | ||||
$ hg debugbuilddag '.:a*a:b*b:c*a:d*d:e*e:f<b+2:g<d+3:h*c/f:i*g/h:j*i/j:k.' | ||||
$ hg test-log | ||||
o k rank=14 | ||||
|\ | ||||
| o j rank=9 | ||||
| |\ | ||||
o \ \ i rank=7 | ||||
|\ \ \ | ||||
| | | o h rank=5 | ||||
|
r51354 | | | | : | ||
| | o : g rank=4 | ||||
| | : : | ||||
| o : : f rank=4 | ||||
| | : : | ||||
|
r51288 | | o---+ e rank=3 | ||
| / / | ||||
|
r51354 | | : o d rank=2 | ||
| : | | ||||
o : | c rank=3 | ||||
:/ / | ||||
|
r51288 | o / b rank=2 | ||
|/ | ||||
o a rank=1 | ||||
Display sort(i) for reference: | ||||
$ hg test-sts i | ||||
i,c,b,f,e,d,a, (no-eol) | ||||
Display sort(j) for reference: | ||||
$ hg test-sts j | ||||
j,g,*,b,h,*,d,a, (no-eol) (glob) | ||||
Check that the end of excl(i) is postponed to excl(j), the end of inherited(i) | ||||
is postponed to inherited(j) in sort(k): | ||||
$ hg test-sts k | ||||
k,i,c,f,e,j,g,*,b,h,*,d,a, (no-eol) (glob) | ||||
|
r51421 | Check the leaps of "i". | ||
$ hg test-leaps i | ||||
bf | ||||
$ hg test-leaps --specific i | ||||
Check the leaps of "j". | ||||
$ hg test-leaps j | ||||
bh | ||||
$ hg test-leaps --specific j | ||||
Check the leaps of "k". | ||||
$ hg test-leaps k | ||||
cf | ||||
ej | ||||
bh | ||||
$ hg test-leaps --specific k | ||||
cf | ||||
|
r51288 | $ cd .. | ||
|
r51422 | |||
Example 10: adjusting other leaps | ||||
================================= | ||||
This test checks the adjustment of leaps attached to other open merges in the | ||||
stack. | ||||
# o | ||||
# | | ||||
# ------>------ | ||||
# | | | ||||
# n l | ||||
# | | | ||||
# | ----<---- | ||||
# | | | | ||||
# | i k | ||||
# m | | | ||||
# | ---<--- | | ||||
# | | | | | ||||
# | d h | | ||||
# | | | j | ||||
# | | g | | ||||
# | c | | | ||||
# | | +----- | ||||
# -----+ | | ||||
# | f | ||||
# b | | ||||
# | e <- Done with excl(o) by element count, without | ||||
# | | having emitted "b". Implicitly unstack open | ||||
# ---+--- merges to leap e->n. | ||||
# | | ||||
# a | ||||
$ hg init example-10 | ||||
$ cd example-10 | ||||
$ hg debugbuilddag ' | ||||
> .:a | ||||
> *a:b.:c.:d | ||||
> *a:e.:f.:g.:h | ||||
> *d/h:i | ||||
> *f:j+6:k | ||||
> *i/k:l | ||||
> *b:m+15:n | ||||
> *n/l:o. | ||||
> ' | ||||
$ hg test-log | ||||
o o rank=34 | ||||
|\ | ||||
| o n rank=18 | ||||
| : | ||||
| o m rank=3 | ||||
| | | ||||
o | l rank=17 | ||||
|\ \ | ||||
| o | k rank=10 | ||||
| : | | ||||
| o | j rank=4 | ||||
| | | | ||||
o | | i rank=9 | ||||
|\ \ \ | ||||
| o | | h rank=5 | ||||
| | | | | ||||
| o | | g rank=4 | ||||
| |/ / | ||||
| o | f rank=3 | ||||
| | | | ||||
| o | e rank=2 | ||||
| | | | ||||
o | | d rank=4 | ||||
| | | | ||||
o---+ c rank=3 | ||||
/ / | ||||
| o b rank=2 | ||||
|/ | ||||
o a rank=1 | ||||
Check the stable-tail sort of "o": | ||||
$ hg test-sts o | ||||
o,l,i,d,c,h,g,k,*,j,f,e,n,*,m,b,a, (no-eol) (glob) | ||||
Stale-tail sort of "l" for reference: | ||||
$ hg test-sts l | ||||
l,i,d,c,b,h,g,k,*,j,f,e,a, (no-eol) (glob) | ||||
Check the corresponding leaps: | ||||
$ hg test-leaps o | ||||
ch | ||||
gk | ||||
en | ||||
$ hg test-leaps --specific o | ||||
ch | ||||
$ hg test-leaps l | ||||
bh | ||||
gk | ||||
$ hg test-leaps --specific l | ||||
$ cd .. | ||||
Example 11: adjusting other leaps with the same destination | ||||
=========================================================== | ||||
This is a variant of the previous test, checking the adjustment of leaps having | ||||
the same destination in particular. | ||||
# r | ||||
# | | ||||
# ------>------ | ||||
# | | | ||||
# | o | ||||
# q | | ||||
# | ------>------ | ||||
# | | | | ||||
# | n l | ||||
# | | | | ||||
# | | ----<---- | ||||
# p | | | | ||||
# | | i k | ||||
# | m | | | ||||
# | | ---<--- | | ||||
# | | | | | | ||||
# | | d h | | ||||
# | | | | j | ||||
# -----]|[---+ | | <- in sts(r): leap d->h | ||||
# | | g | | ||||
# | c | | | ||||
# | | +----- | ||||
# -----+ | <- the leap c->h of sts(o) | ||||
# | f is shadowed in sts(r) | ||||
# b | | ||||
# | e | ||||
# | | | ||||
# ---+--- | ||||
# | | ||||
# a | ||||
$ hg init example-11 | ||||
$ cd example-11 | ||||
$ hg debugbuilddag ' | ||||
> .:a | ||||
> *a:b.:c.:d | ||||
> *a:e.:f.:g.:h | ||||
> *d/h:i | ||||
> *f:j+6:k | ||||
> *i/k:l | ||||
> *b:m+15:n | ||||
> *n/l:o | ||||
> *c:p+31:q | ||||
> *o/q:r. | ||||
> ' | ||||
$ hg test-log | ||||
o r rank=67 | ||||
|\ | ||||
| o q rank=35 | ||||
| : | ||||
| o p rank=4 | ||||
| | | ||||
o | o rank=34 | ||||
|\ \ | ||||
| o | n rank=18 | ||||
| : | | ||||
| o | m rank=3 | ||||
| | | | ||||
o | | l rank=17 | ||||
|\ \ \ | ||||
| o | | k rank=10 | ||||
| : | | | ||||
| o | | j rank=4 | ||||
| | | | | ||||
o | | | i rank=9 | ||||
|\ \ \ \ | ||||
| o | | | h rank=5 | ||||
| | | | | | ||||
| o | | | g rank=4 | ||||
| |/ / / | ||||
| o | | f rank=3 | ||||
| | | | | ||||
| o | | e rank=2 | ||||
| | | | | ||||
o-----+ d rank=4 | ||||
/ / / | ||||
| | o c rank=3 | ||||
| |/ | ||||
| o b rank=2 | ||||
|/ | ||||
o a rank=1 | ||||
Check the stable-tail sort of "r": | ||||
$ hg test-sts r | ||||
r,o,l,i,d,h,g,k,*,j,f,e,n,*,m,q,*,p,c,b,a, (no-eol) (glob) | ||||
Stable-tail sort of "o" for reference: | ||||
$ hg test-sts o | ||||
o,l,i,d,c,h,g,k,*,j,f,e,n,*,m,b,a, (no-eol) (glob) | ||||
Check the associated leaps: | ||||
$ hg test-leaps r | ||||
dh | ||||
gk | ||||
en | ||||
mq | ||||
$ hg test-leaps --specific r | ||||
dh | ||||
$ hg test-leaps o | ||||
ch | ||||
gk | ||||
en | ||||
$ hg test-leaps --specific o | ||||
ch | ||||
$ cd .. | ||||
Example 12 | ||||
========== | ||||
This is a variant of the previous test, checking the adjustments of leaps | ||||
in the open merge stack having a lower destination (which should appear only | ||||
later in the stable-tail sort of the head). | ||||
# t | ||||
# | | ||||
# ------>------ | ||||
# | | | ||||
# | o | ||||
# s | | ||||
# | ------>------ | ||||
# | | | | ||||
# | n l | ||||
# r | | | ||||
# | | ----<---- | ||||
# | | | | | ||||
# --<-- | i k | ||||
# | | m | | | ||||
# p q | ---<--- | | ||||
# | | | | | | | ||||
# | ---]|[--]|[----+ | | ||||
# | | | | | | ||||
# | | d h | | ||||
# | | | | j | ||||
# -------]|[---+ | | <- d->k is sts(t) | ||||
# | | g | | ||||
# | c | | | ||||
# | | +----- | ||||
# -----+ | <- c->h in sts(o), not applying in sts(t) | ||||
# | f | ||||
# b | | ||||
# | e | ||||
# | | | ||||
# ---+--- | ||||
# | | ||||
# a | ||||
$ hg init example-12 | ||||
$ cd example-12 | ||||
$ hg debugbuilddag ' | ||||
> .:a | ||||
> *a:b.:c.:d | ||||
> *a:e.:f.:g.:h | ||||
> *d/h:i | ||||
> *f:j+6:k | ||||
> *i/k:l | ||||
> *b:m+15:n | ||||
> *n/l:o | ||||
> *c:p | ||||
> *h:q | ||||
> *p/q:r+25:s | ||||
> *o/s:t. | ||||
> ' | ||||
$ hg test-log | ||||
o t rank=63 | ||||
|\ | ||||
| o s rank=35 | ||||
| : | ||||
| o r rank=10 | ||||
| |\ | ||||
| | o q rank=6 | ||||
| | | | ||||
| o | p rank=4 | ||||
| | | | ||||
o | | o rank=34 | ||||
|\ \ \ | ||||
| o | | n rank=18 | ||||
| : | | | ||||
| o | | m rank=3 | ||||
| | | | | ||||
o | | | l rank=17 | ||||
|\ \ \ \ | ||||
| o | | | k rank=10 | ||||
| : | | | | ||||
| o | | | j rank=4 | ||||
| | | | | | ||||
o-------+ i rank=9 | ||||
| | | | | | ||||
| | | | o h rank=5 | ||||
| | | | | | ||||
| +-----o g rank=4 | ||||
| | | | | ||||
| o | | f rank=3 | ||||
| | | | | ||||
| o | | e rank=2 | ||||
| | | | | ||||
o-----+ d rank=4 | ||||
/ / / | ||||
| | o c rank=3 | ||||
| |/ | ||||
| o b rank=2 | ||||
|/ | ||||
o a rank=1 | ||||
Check the stable-tail sort of "t": | ||||
$ hg test-sts t | ||||
t,o,l,i,d,k,*,j,n,*,m,s,*,r,p,c,b,q,h,g,f,e,a, (no-eol) (glob) | ||||
Stable-tail sort of "o" for reference: | ||||
$ hg test-sts o | ||||
o,l,i,d,c,h,g,k,*,j,f,e,n,*,m,b,a, (no-eol) (glob) | ||||
Check the associated leaps: | ||||
$ hg test-leaps t | ||||
dk | ||||
jn | ||||
ms | ||||
bq | ||||
$ hg test-leaps --specific t | ||||
dk | ||||
jn | ||||
$ hg test-leaps o | ||||
ch | ||||
gk | ||||
en | ||||
$ hg test-leaps --specific o | ||||
ch | ||||
$ cd .. | ||||