Mercurial > hg
annotate tests/test-ancestor.py @ 38727:fcb517ff9562
debug: move extensions debug behind a dedicated flag
Since b86664c81833, we process the `--debug` flag earlier. This is overall
good and useful, but has at least one negative side effect.
Previously the debug message we report when trying to import extensions were
issued before we processed the `--debug` flag. Now they happen after.
Before:
$ ./hg id --debug
21f507b8de2f9c1606e9aeb5ec7d2a6dedb7a4a7 tip
After:
$ ./hg id --debug ☿ (revset-bench)
could not import hgext.evolve (No module named evolve): trying hgext3rd.evolve
could not import hgext.mercurial_keyring (No module named mercurial_keyring): trying hgext3rd.mercurial_keyring
could not import hgext3rd.mercurial_keyring (No module named mercurial_keyring): trying mercurial_keyring
could not import hgext.hggit (No module named hggit): trying hgext3rd.hggit
could not import hgext3rd.hggit (No module named hggit): trying hggit
21f507b8de2f9c1606e9aeb5ec7d2a6dedb7a4a7 tip
(This get worse if --traceback is used).
To work around this, we move this extensions related debug message behind a
new flag 'devel.debug.extensions' and restore the previous output.
I'm not fully happy about using the 'devel' section for a flag that can be
used by legitimate users to debug extensions issues. However, it fits well
next to other `devel.devel.*` options and is mostly used by extensions author
anyway.
We might move it to another, more appropriate section in the future (using
alias).
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Mon, 16 Jul 2018 18:02:30 +0200 |
parents | 6754d0c5e1b5 |
children | 431068d7e9db |
rev | line source |
---|---|
28723
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
1 from __future__ import absolute_import, print_function |
27280
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
2 |
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
3 import binascii |
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
4 import getopt |
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
5 import math |
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
6 import os |
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
7 import random |
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
8 import sys |
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
9 import time |
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
10 |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
11 from mercurial.node import nullrev |
27280
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
12 from mercurial import ( |
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
13 ancestor, |
30402
945f8229b30d
debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28774
diff
changeset
|
14 debugcommands, |
27280
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
15 hg, |
32861
20d70df64e93
py3: alias long to int and xrange to range in test-ancestor.py on Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32291
diff
changeset
|
16 pycompat, |
28774
21a507f9a6cd
tests: alias ui as uimod in test-ancestor
Yuya Nishihara <yuya@tcha.org>
parents:
28723
diff
changeset
|
17 ui as uimod, |
27280
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
18 util, |
4056fdf71aff
tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23342
diff
changeset
|
19 ) |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
20 |
32861
20d70df64e93
py3: alias long to int and xrange to range in test-ancestor.py on Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32291
diff
changeset
|
21 if pycompat.ispy3: |
20d70df64e93
py3: alias long to int and xrange to range in test-ancestor.py on Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32291
diff
changeset
|
22 long = int |
20d70df64e93
py3: alias long to int and xrange to range in test-ancestor.py on Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32291
diff
changeset
|
23 xrange = range |
20d70df64e93
py3: alias long to int and xrange to range in test-ancestor.py on Python 3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32291
diff
changeset
|
24 |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
25 def buildgraph(rng, nodes=100, rootprob=0.05, mergeprob=0.2, prevprob=0.7): |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
26 '''nodes: total number of nodes in the graph |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
27 rootprob: probability that a new node (not 0) will be a root |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
28 mergeprob: probability that, excluding a root a node will be a merge |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
29 prevprob: probability that p1 will be the previous node |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
30 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
31 return value is a graph represented as an adjacency list. |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
32 ''' |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
33 graph = [None] * nodes |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
34 for i in xrange(nodes): |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
35 if i == 0 or rng.random() < rootprob: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
36 graph[i] = [nullrev] |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
37 elif i == 1: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
38 graph[i] = [0] |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
39 elif rng.random() < mergeprob: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
40 if i == 2 or rng.random() < prevprob: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
41 # p1 is prev |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
42 p1 = i - 1 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
43 else: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
44 p1 = rng.randrange(i - 1) |
32893
a8dfa35a4130
py3: pass range() into list() to get one explicitly
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32861
diff
changeset
|
45 p2 = rng.choice(list(range(0, p1)) + list(range(p1 + 1, i))) |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
46 graph[i] = [p1, p2] |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
47 elif rng.random() < prevprob: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
48 graph[i] = [i - 1] |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
49 else: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
50 graph[i] = [rng.randrange(i - 1)] |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
51 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
52 return graph |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
53 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
54 def buildancestorsets(graph): |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
55 ancs = [None] * len(graph) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
56 for i in xrange(len(graph)): |
32291
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
30559
diff
changeset
|
57 ancs[i] = {i} |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
58 if graph[i] == [nullrev]: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
59 continue |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
60 for p in graph[i]: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
61 ancs[i].update(ancs[p]) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
62 return ancs |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
63 |
23335
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
64 class naiveincrementalmissingancestors(object): |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
65 def __init__(self, ancs, bases): |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
66 self.ancs = ancs |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
67 self.bases = set(bases) |
23341
bcc3012f8477
ancestor: add a way to add to bases of a missing ancestor object
Siddharth Agarwal <sid0@fb.com>
parents:
23336
diff
changeset
|
68 def addbases(self, newbases): |
bcc3012f8477
ancestor: add a way to add to bases of a missing ancestor object
Siddharth Agarwal <sid0@fb.com>
parents:
23336
diff
changeset
|
69 self.bases.update(newbases) |
23342
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
70 def removeancestorsfrom(self, revs): |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
71 for base in self.bases: |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
72 if base != nullrev: |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
73 revs.difference_update(self.ancs[base]) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
74 revs.discard(nullrev) |
23335
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
75 def missingancestors(self, revs): |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
76 res = set() |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
77 for rev in revs: |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
78 if rev != nullrev: |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
79 res.update(self.ancs[rev]) |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
80 for base in self.bases: |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
81 if base != nullrev: |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
82 res.difference_update(self.ancs[base]) |
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
83 return sorted(res) |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
84 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
85 def test_missingancestors(seed, rng): |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
86 # empirically observed to take around 1 second |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
87 graphcount = 100 |
23336
4178ad511edf
test-ancestor: add support for multiple tests against one incremental object
Siddharth Agarwal <sid0@fb.com>
parents:
23335
diff
changeset
|
88 testcount = 10 |
4178ad511edf
test-ancestor: add support for multiple tests against one incremental object
Siddharth Agarwal <sid0@fb.com>
parents:
23335
diff
changeset
|
89 inccount = 10 |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
90 nerrs = [0] |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
91 # the default mu and sigma give us a nice distribution of mostly |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
92 # single-digit counts (including 0) with some higher ones |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
93 def lognormrandom(mu, sigma): |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
94 return int(math.floor(rng.lognormvariate(mu, sigma))) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
95 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
96 def samplerevs(nodes, mu=1.1, sigma=0.8): |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
97 count = min(lognormrandom(mu, sigma), len(nodes)) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
98 return rng.sample(nodes, count) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
99 |
23336
4178ad511edf
test-ancestor: add support for multiple tests against one incremental object
Siddharth Agarwal <sid0@fb.com>
parents:
23335
diff
changeset
|
100 def err(seed, graph, bases, seq, output, expected): |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
101 if nerrs[0] == 0: |
28723
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
102 print('seed:', hex(seed)[:-1], file=sys.stderr) |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
103 if gerrs[0] == 0: |
28723
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
104 print('graph:', graph, file=sys.stderr) |
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
105 print('* bases:', bases, file=sys.stderr) |
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
106 print('* seq: ', seq, file=sys.stderr) |
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
107 print('* output: ', output, file=sys.stderr) |
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
108 print('* expected:', expected, file=sys.stderr) |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
109 nerrs[0] += 1 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
110 gerrs[0] += 1 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
111 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
112 for g in xrange(graphcount): |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
113 graph = buildgraph(rng) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
114 ancs = buildancestorsets(graph) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
115 gerrs = [0] |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
116 for _ in xrange(testcount): |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
117 # start from nullrev to include it as a possibility |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
118 graphnodes = range(nullrev, len(graph)) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
119 bases = samplerevs(graphnodes) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
120 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
121 # fast algorithm |
23334
59e6e5dd3605
ancestor.missingancestors: turn into a state-keeping class
Siddharth Agarwal <sid0@fb.com>
parents:
23331
diff
changeset
|
122 inc = ancestor.incrementalmissingancestors(graph.__getitem__, bases) |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
123 # reference slow algorithm |
23335
3f28e8cb3066
test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents:
23334
diff
changeset
|
124 naiveinc = naiveincrementalmissingancestors(ancs, bases) |
23336
4178ad511edf
test-ancestor: add support for multiple tests against one incremental object
Siddharth Agarwal <sid0@fb.com>
parents:
23335
diff
changeset
|
125 seq = [] |
23342
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
126 revs = [] |
23336
4178ad511edf
test-ancestor: add support for multiple tests against one incremental object
Siddharth Agarwal <sid0@fb.com>
parents:
23335
diff
changeset
|
127 for _ in xrange(inccount): |
23341
bcc3012f8477
ancestor: add a way to add to bases of a missing ancestor object
Siddharth Agarwal <sid0@fb.com>
parents:
23336
diff
changeset
|
128 if rng.random() < 0.2: |
bcc3012f8477
ancestor: add a way to add to bases of a missing ancestor object
Siddharth Agarwal <sid0@fb.com>
parents:
23336
diff
changeset
|
129 newbases = samplerevs(graphnodes) |
bcc3012f8477
ancestor: add a way to add to bases of a missing ancestor object
Siddharth Agarwal <sid0@fb.com>
parents:
23336
diff
changeset
|
130 seq.append(('addbases', newbases)) |
bcc3012f8477
ancestor: add a way to add to bases of a missing ancestor object
Siddharth Agarwal <sid0@fb.com>
parents:
23336
diff
changeset
|
131 inc.addbases(newbases) |
bcc3012f8477
ancestor: add a way to add to bases of a missing ancestor object
Siddharth Agarwal <sid0@fb.com>
parents:
23336
diff
changeset
|
132 naiveinc.addbases(newbases) |
23342
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
133 if rng.random() < 0.4: |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
134 # larger set so that there are more revs to remove from |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
135 revs = samplerevs(graphnodes, mu=1.5) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
136 seq.append(('removeancestorsfrom', revs)) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
137 hrevs = set(revs) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
138 rrevs = set(revs) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
139 inc.removeancestorsfrom(hrevs) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
140 naiveinc.removeancestorsfrom(rrevs) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
141 if hrevs != rrevs: |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
142 err(seed, graph, bases, seq, sorted(hrevs), |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
143 sorted(rrevs)) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
144 else: |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
145 revs = samplerevs(graphnodes) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
146 seq.append(('missingancestors', revs)) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
147 h = inc.missingancestors(revs) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
148 r = naiveinc.missingancestors(revs) |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
149 if h != r: |
f710644e1ce9
ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents:
23341
diff
changeset
|
150 err(seed, graph, bases, seq, h, r) |
18079
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
151 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
152 # graph is a dict of child->parent adjacency lists for this graph: |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
153 # o 13 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
154 # | |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
155 # | o 12 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
156 # | | |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
157 # | | o 11 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
158 # | | |\ |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
159 # | | | | o 10 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
160 # | | | | | |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
161 # | o---+ | 9 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
162 # | | | | | |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
163 # o | | | | 8 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
164 # / / / / |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
165 # | | o | 7 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
166 # | | | | |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
167 # o---+ | 6 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
168 # / / / |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
169 # | | o 5 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
170 # | |/ |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
171 # | o 4 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
172 # | | |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
173 # o | 3 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
174 # | | |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
175 # | o 2 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
176 # |/ |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
177 # o 1 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
178 # | |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
179 # o 0 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
180 |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
181 graph = {0: [-1], 1: [0], 2: [1], 3: [1], 4: [2], 5: [4], 6: [4], |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
182 7: [4], 8: [-1], 9: [6, 7], 10: [5], 11: [3, 7], 12: [9], |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
183 13: [8]} |
b3ba69692f8a
ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
184 |
18091
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
185 def genlazyancestors(revs, stoprev=0, inclusive=False): |
28723
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
186 print(("%% lazy ancestor set for %s, stoprev = %s, inclusive = %s" % |
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
187 (revs, stoprev, inclusive))) |
23328
3a7d9c0c57a5
ancestor.lazyancestors: take parentrevs function rather than changelog
Siddharth Agarwal <sid0@fb.com>
parents:
22355
diff
changeset
|
188 return ancestor.lazyancestors(graph.get, revs, stoprev=stoprev, |
18091
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
189 inclusive=inclusive) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
190 |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
191 def printlazyancestors(s, l): |
28723
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
192 print('membership: %r' % [n for n in l if n in s]) |
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
193 print('iteration: %r' % list(s)) |
18091
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
194 |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
195 def test_lazyancestors(): |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
196 # Empty revs |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
197 s = genlazyancestors([]) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
198 printlazyancestors(s, [3, 0, -1]) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
199 |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
200 # Standard example |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
201 s = genlazyancestors([11, 13]) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
202 printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0]) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
203 |
22355
731b2a90983b
test-ancestor: add a test for `ancestor` with ancestry within the initset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21024
diff
changeset
|
204 # Standard with ancestry in the initial set (1 is ancestor of 3) |
731b2a90983b
test-ancestor: add a test for `ancestor` with ancestry within the initset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21024
diff
changeset
|
205 s = genlazyancestors([1, 3]) |
731b2a90983b
test-ancestor: add a test for `ancestor` with ancestry within the initset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21024
diff
changeset
|
206 printlazyancestors(s, [1, -1, 0]) |
731b2a90983b
test-ancestor: add a test for `ancestor` with ancestry within the initset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21024
diff
changeset
|
207 |
18091
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
208 # Including revs |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
209 s = genlazyancestors([11, 13], inclusive=True) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
210 printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0]) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
211 |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
212 # Test with stoprev |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
213 s = genlazyancestors([11, 13], stoprev=6) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
214 printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0]) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
215 s = genlazyancestors([11, 13], stoprev=6, inclusive=True) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
216 printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0]) |
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
217 |
19504
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
218 |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
219 # The C gca algorithm requires a real repo. These are textual descriptions of |
33475
f501322512b6
parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents:
32894
diff
changeset
|
220 # DAGs that have been known to be problematic, and, optionally, known pairs |
f501322512b6
parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents:
32894
diff
changeset
|
221 # of revisions and their expected ancestor list. |
19504
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
222 dagtests = [ |
36626
6754d0c5e1b5
py3: make test-ancestors.py pass on Python 3 with C extensions
Yuya Nishihara <yuya@tcha.org>
parents:
33475
diff
changeset
|
223 (b'+2*2*2/*3/2', {}), |
6754d0c5e1b5
py3: make test-ancestors.py pass on Python 3 with C extensions
Yuya Nishihara <yuya@tcha.org>
parents:
33475
diff
changeset
|
224 (b'+3*3/*2*2/*4*4/*4/2*4/2*2', {}), |
6754d0c5e1b5
py3: make test-ancestors.py pass on Python 3 with C extensions
Yuya Nishihara <yuya@tcha.org>
parents:
33475
diff
changeset
|
225 (b'+2*2*/2*4*/4*/3*2/4', {(6, 7): [3, 5]}), |
19504
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
226 ] |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
227 def test_gca(): |
30559
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30402
diff
changeset
|
228 u = uimod.ui.load() |
33475
f501322512b6
parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents:
32894
diff
changeset
|
229 for i, (dag, tests) in enumerate(dagtests): |
32894
ec9ed269edc3
py3: pass the path in hg.repository() as bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32893
diff
changeset
|
230 repo = hg.repository(u, b'gca%d' % i, create=1) |
19504
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
231 cl = repo.changelog |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
232 if not util.safehasattr(cl.index, 'ancestors'): |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
233 # C version not available |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
234 return |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
235 |
30402
945f8229b30d
debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28774
diff
changeset
|
236 debugcommands.debugbuilddag(u, repo, dag) |
19504
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
237 # Compare the results of the Python and C versions. This does not |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
238 # include choosing a winner when more than one gca exists -- we make |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
239 # sure both return exactly the same set of gcas. |
33475
f501322512b6
parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents:
32894
diff
changeset
|
240 # Also compare against expected results, if available. |
19504
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
241 for a in cl: |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
242 for b in cl: |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
243 cgcas = sorted(cl.index.ancestors(a, b)) |
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
244 pygcas = sorted(ancestor.ancestors(cl.parentrevs, a, b)) |
33475
f501322512b6
parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents:
32894
diff
changeset
|
245 expected = None |
f501322512b6
parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents:
32894
diff
changeset
|
246 if (a, b) in tests: |
f501322512b6
parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents:
32894
diff
changeset
|
247 expected = tests[(a, b)] |
f501322512b6
parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents:
32894
diff
changeset
|
248 if cgcas != pygcas or (expected and cgcas != expected): |
28723
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
249 print("test_gca: for dag %s, gcas for %d, %d:" |
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
250 % (dag, a, b)) |
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
251 print(" C returned: %s" % cgcas) |
18e738038d78
py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents:
27280
diff
changeset
|
252 print(" Python returned: %s" % pygcas) |
33475
f501322512b6
parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents:
32894
diff
changeset
|
253 if expected: |
f501322512b6
parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents:
32894
diff
changeset
|
254 print(" expected: %s" % expected) |
19504
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
255 |
23330
37c3731d8a58
test-ancestor: define a main function
Siddharth Agarwal <sid0@fb.com>
parents:
23329
diff
changeset
|
256 def main(): |
23331
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
257 seed = None |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
258 opts, args = getopt.getopt(sys.argv[1:], 's:', ['seed=']) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
259 for o, a in opts: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
260 if o in ('-s', '--seed'): |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
261 seed = long(a, base=0) # accepts base 10 or 16 strings |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
262 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
263 if seed is None: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
264 try: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
265 seed = long(binascii.hexlify(os.urandom(16)), 16) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
266 except AttributeError: |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
267 seed = long(time.time() * 1000) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
268 |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
269 rng = random.Random(seed) |
3b1b8f25443e
test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents:
23330
diff
changeset
|
270 test_missingancestors(seed, rng) |
18091
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18079
diff
changeset
|
271 test_lazyancestors() |
19504
2fa303619b4d
ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents:
18091
diff
changeset
|
272 test_gca() |
23330
37c3731d8a58
test-ancestor: define a main function
Siddharth Agarwal <sid0@fb.com>
parents:
23329
diff
changeset
|
273 |
37c3731d8a58
test-ancestor: define a main function
Siddharth Agarwal <sid0@fb.com>
parents:
23329
diff
changeset
|
274 if __name__ == '__main__': |
37c3731d8a58
test-ancestor: define a main function
Siddharth Agarwal <sid0@fb.com>
parents:
23329
diff
changeset
|
275 main() |