tests/test-ancestor.py
author Arseniy Alekseyev <aalekseyev@janestreet.com>
Fri, 26 Apr 2024 19:10:35 +0100
changeset 51626 865efc020c33
parent 50928 d718eddf01d9
permissions -rw-r--r--
dirstate: remove the python-side whitelist of allowed matchers This whitelist is too permissive because it allows matchers that contain disallowed ones deep inside, for example through `intersectionmatcher`. It is also too restrictive because it doesn't pass through some of the matchers we support, such as `patternmatcher`. It's also unnecessary because unsupported matchers raise `FallbackError` and we fall back anyway. Making this change makes more of the tests use rust code path, and therefore subtly change behavior. For example, rust status in largefiles repos seems to have strange behavior.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
27280
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
     1
import binascii
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
     2
import getopt
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
     3
import math
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
     4
import os
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
     5
import random
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
     6
import sys
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
     7
import time
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
     8
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
     9
from mercurial.node import nullrev
27280
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
    10
from mercurial import (
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
    11
    ancestor,
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28774
diff changeset
    12
    debugcommands,
27280
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
    13
    hg,
28774
21a507f9a6cd tests: alias ui as uimod in test-ancestor
Yuya Nishihara <yuya@tcha.org>
parents: 28723
diff changeset
    14
    ui as uimod,
27280
4056fdf71aff tests/test-ancestor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 23342
diff changeset
    15
)
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    16
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
    17
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    18
def buildgraph(rng, nodes=100, rootprob=0.05, mergeprob=0.2, prevprob=0.7):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
    19
    """nodes: total number of nodes in the graph
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    20
    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
    21
    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
    22
    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
    23
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    24
    return value is a graph represented as an adjacency list.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
    25
    """
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    26
    graph = [None] * nodes
49285
56f98406831b py3: remove xrange() compatibility code
Manuel Jacob <me@manueljacob.de>
parents: 48946
diff changeset
    27
    for i in range(nodes):
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    28
        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
    29
            graph[i] = [nullrev]
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    30
        elif i == 1:
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    31
            graph[i] = [0]
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    32
        elif rng.random() < mergeprob:
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    33
            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
    34
                # p1 is prev
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    35
                p1 = i - 1
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    36
            else:
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    37
                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
    38
            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
    39
            graph[i] = [p1, p2]
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    40
        elif rng.random() < prevprob:
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    41
            graph[i] = [i - 1]
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    42
        else:
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    43
            graph[i] = [rng.randrange(i - 1)]
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    44
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    45
    return graph
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    46
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
    47
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    48
def buildancestorsets(graph):
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    49
    ancs = [None] * len(graph)
49285
56f98406831b py3: remove xrange() compatibility code
Manuel Jacob <me@manueljacob.de>
parents: 48946
diff changeset
    50
    for i in range(len(graph)):
32291
bd872f64a8ba cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents: 30559
diff changeset
    51
        ancs[i] = {i}
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    52
        if graph[i] == [nullrev]:
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    53
            continue
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    54
        for p in graph[i]:
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    55
            ancs[i].update(ancs[p])
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    56
    return ancs
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    57
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
    58
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
    59
class naiveincrementalmissingancestors:
23335
3f28e8cb3066 test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents: 23334
diff changeset
    60
    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
    61
        self.ancs = ancs
3f28e8cb3066 test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents: 23334
diff changeset
    62
        self.bases = set(bases)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
    63
23341
bcc3012f8477 ancestor: add a way to add to bases of a missing ancestor object
Siddharth Agarwal <sid0@fb.com>
parents: 23336
diff changeset
    64
    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
    65
        self.bases.update(newbases)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
    66
23342
f710644e1ce9 ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents: 23341
diff changeset
    67
    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
    68
        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
    69
            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
    70
                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
    71
        revs.discard(nullrev)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
    72
23335
3f28e8cb3066 test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents: 23334
diff changeset
    73
    def missingancestors(self, revs):
3f28e8cb3066 test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents: 23334
diff changeset
    74
        res = set()
3f28e8cb3066 test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents: 23334
diff changeset
    75
        for rev in revs:
3f28e8cb3066 test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents: 23334
diff changeset
    76
            if rev != nullrev:
3f28e8cb3066 test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents: 23334
diff changeset
    77
                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
    78
        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
    79
            if base != nullrev:
3f28e8cb3066 test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents: 23334
diff changeset
    80
                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
    81
        return sorted(res)
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    82
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
    83
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    84
def test_missingancestors(seed, rng):
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    85
    # 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
    86
    graphcount = 100
23336
4178ad511edf test-ancestor: add support for multiple tests against one incremental object
Siddharth Agarwal <sid0@fb.com>
parents: 23335
diff changeset
    87
    testcount = 10
4178ad511edf test-ancestor: add support for multiple tests against one incremental object
Siddharth Agarwal <sid0@fb.com>
parents: 23335
diff changeset
    88
    inccount = 10
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    89
    nerrs = [0]
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    90
    # 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
    91
    # 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
    92
    def lognormrandom(mu, sigma):
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    93
        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
    94
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    95
    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
    96
        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
    97
        return rng.sample(nodes, count)
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
    98
23336
4178ad511edf test-ancestor: add support for multiple tests against one incremental object
Siddharth Agarwal <sid0@fb.com>
parents: 23335
diff changeset
    99
    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
   100
        if nerrs[0] == 0:
28723
18e738038d78 py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27280
diff changeset
   101
            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
   102
        if gerrs[0] == 0:
28723
18e738038d78 py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27280
diff changeset
   103
            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
   104
        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
   105
        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
   106
        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
   107
        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
   108
        nerrs[0] += 1
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   109
        gerrs[0] += 1
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   110
49285
56f98406831b py3: remove xrange() compatibility code
Manuel Jacob <me@manueljacob.de>
parents: 48946
diff changeset
   111
    for g in range(graphcount):
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   112
        graph = buildgraph(rng)
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   113
        ancs = buildancestorsets(graph)
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   114
        gerrs = [0]
49285
56f98406831b py3: remove xrange() compatibility code
Manuel Jacob <me@manueljacob.de>
parents: 48946
diff changeset
   115
        for _ in range(testcount):
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   116
            # 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
   117
            graphnodes = range(nullrev, len(graph))
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   118
            bases = samplerevs(graphnodes)
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   119
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   120
            # fast algorithm
23334
59e6e5dd3605 ancestor.missingancestors: turn into a state-keeping class
Siddharth Agarwal <sid0@fb.com>
parents: 23331
diff changeset
   121
            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
   122
            # reference slow algorithm
23335
3f28e8cb3066 test-ancestor: move naive missing ancestor algorithm into a class
Siddharth Agarwal <sid0@fb.com>
parents: 23334
diff changeset
   123
            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
   124
            seq = []
49285
56f98406831b py3: remove xrange() compatibility code
Manuel Jacob <me@manueljacob.de>
parents: 48946
diff changeset
   125
            for _ in range(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
   126
                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
   127
                    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
   128
                    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
   129
                    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
   130
                    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
   131
                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
   132
                    # 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
   133
                    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
   134
                    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
   135
                    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
   136
                    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
   137
                    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
   138
                    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
   139
                    if hrevs != rrevs:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   140
                        err(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   141
                            seed,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   142
                            graph,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   143
                            bases,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   144
                            seq,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   145
                            sorted(hrevs),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   146
                            sorted(rrevs),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   147
                        )
23342
f710644e1ce9 ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents: 23341
diff changeset
   148
                else:
f710644e1ce9 ancestor: add a way to remove ancestors of bases from a given set
Siddharth Agarwal <sid0@fb.com>
parents: 23341
diff changeset
   149
                    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
   150
                    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
   151
                    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
   152
                    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
   153
                    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
   154
                        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
   155
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   156
18079
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   157
# 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
   158
# o  13
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   159
# |
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   160
# | o  12
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   161
# | |
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   162
# | | o    11
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   163
# | | |\
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   164
# | | | | o  10
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   165
# | | | | |
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   166
# | o---+ |  9
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   167
# | | | | |
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   168
# o | | | |  8
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   169
#  / / / /
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   170
# | | o |  7
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   171
# | | | |
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   172
# o---+ |  6
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   173
#  / / /
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   174
# | | o  5
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   175
# | |/
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   176
# | o  4
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   177
# | |
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   178
# o |  3
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   179
# | |
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   180
# | o  2
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   181
# |/
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   182
# o  1
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   183
# |
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   184
# o  0
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   185
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   186
graph = {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   187
    0: [-1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   188
    1: [0, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   189
    2: [1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   190
    3: [1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   191
    4: [2, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   192
    5: [4, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   193
    6: [4, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   194
    7: [4, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   195
    8: [-1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   196
    9: [6, 7],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   197
    10: [5, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   198
    11: [3, 7],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   199
    12: [9, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   200
    13: [8, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   201
}
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   202
18079
b3ba69692f8a ancestor: move missingancestors doctest out into a separate file
Siddharth Agarwal <sid0@fb.com>
parents:
diff changeset
   203
40959
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   204
def test_missingancestors_explicit():
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   205
    """A few explicit cases, easier to check for catching errors in refactors.
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   206
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   207
    The bigger graph at the end has been produced by the random generator
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   208
    above, and we have some evidence that the other tests don't cover it.
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   209
    """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   210
    for i, (bases, revs) in enumerate(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   211
        (
49285
56f98406831b py3: remove xrange() compatibility code
Manuel Jacob <me@manueljacob.de>
parents: 48946
diff changeset
   212
            ({1, 2, 3, 4, 7}, set(range(10))),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   213
            ({10}, set({11, 12, 13, 14})),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   214
            ({7}, set({1, 2, 3, 4, 5})),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   215
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   216
    ):
40959
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   217
        print("%% removeancestorsfrom(), example %d" % (i + 1))
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   218
        missanc = ancestor.incrementalmissingancestors(graph.get, bases)
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   219
        missanc.removeancestorsfrom(revs)
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   220
        print("remaining (sorted): %s" % sorted(list(revs)))
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   221
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   222
    for i, (bases, revs) in enumerate(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
   223
        (
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
   224
            ({10}, {11}),
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
   225
            ({11}, {10}),
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
   226
            ({7}, {9, 11}),
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
   227
        )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   228
    ):
40959
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   229
        print("%% missingancestors(), example %d" % (i + 1))
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   230
        missanc = ancestor.incrementalmissingancestors(graph.get, bases)
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   231
        print("return %s" % missanc.missingancestors(revs))
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   232
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   233
    print("% removeancestorsfrom(), bigger graph")
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   234
    vecgraph = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   235
        [-1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   236
        [0, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   237
        [1, 0],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   238
        [2, 1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   239
        [3, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   240
        [4, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   241
        [5, 1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   242
        [2, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   243
        [7, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   244
        [8, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   245
        [9, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   246
        [10, 1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   247
        [3, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   248
        [12, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   249
        [13, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   250
        [14, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   251
        [4, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   252
        [16, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   253
        [17, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   254
        [18, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   255
        [19, 11],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   256
        [20, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   257
        [21, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   258
        [22, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   259
        [23, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   260
        [2, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   261
        [3, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   262
        [26, 24],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   263
        [27, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   264
        [28, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   265
        [12, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   266
        [1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   267
        [1, 9],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   268
        [32, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   269
        [33, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   270
        [34, 31],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   271
        [35, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   272
        [36, 26],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   273
        [37, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   274
        [38, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   275
        [39, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   276
        [40, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   277
        [41, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   278
        [42, 26],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   279
        [0, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   280
        [44, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   281
        [45, 4],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   282
        [40, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   283
        [47, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   284
        [36, 0],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   285
        [49, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   286
        [-1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   287
        [51, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   288
        [52, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   289
        [53, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   290
        [14, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   291
        [55, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   292
        [15, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   293
        [23, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   294
        [58, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   295
        [59, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   296
        [2, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   297
        [61, 59],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   298
        [62, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   299
        [63, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   300
        [-1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   301
        [65, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   302
        [66, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   303
        [67, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   304
        [68, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   305
        [37, 28],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   306
        [69, 25],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   307
        [71, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   308
        [72, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   309
        [50, 2],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   310
        [74, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   311
        [12, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   312
        [18, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   313
        [77, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   314
        [78, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   315
        [79, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   316
        [43, 33],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   317
        [81, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   318
        [82, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   319
        [83, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   320
        [84, 45],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   321
        [85, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   322
        [86, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   323
        [-1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   324
        [88, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   325
        [-1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   326
        [76, 83],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   327
        [44, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   328
        [92, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   329
        [93, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   330
        [9, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   331
        [95, 67],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   332
        [96, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   333
        [97, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   334
        [-1, -1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   335
    ]
40959
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   336
    problem_rev = 28
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   337
    problem_base = 70
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   338
    # problem_rev is a parent of problem_base, but a faulty implementation
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   339
    # could forget to remove it.
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   340
    bases = {60, 26, 70, 3, 96, 19, 98, 49, 97, 47, 1, 6}
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   341
    if problem_rev not in vecgraph[problem_base] or problem_base not in bases:
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   342
        print("Conditions have changed")
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   343
    missanc = ancestor.incrementalmissingancestors(vecgraph.__getitem__, bases)
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   344
    revs = {4, 12, 41, 28, 68, 38, 1, 30, 56, 44}
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   345
    missanc.removeancestorsfrom(revs)
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   346
    if 28 in revs:
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   347
        print("Failed!")
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   348
    else:
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   349
        print("Ok")
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   350
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   351
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   352
def genlazyancestors(revs, stoprev=0, inclusive=False):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   353
    print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   354
        (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   355
            "%% lazy ancestor set for %s, stoprev = %s, inclusive = %s"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   356
            % (revs, stoprev, inclusive)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   357
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   358
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   359
    return ancestor.lazyancestors(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   360
        graph.get, revs, stoprev=stoprev, inclusive=inclusive
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   361
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   362
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   363
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   364
def printlazyancestors(s, l):
28723
18e738038d78 py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27280
diff changeset
   365
    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
   366
    print('iteration:  %r' % list(s))
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   367
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   368
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   369
def test_lazyancestors():
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   370
    # Empty revs
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   371
    s = genlazyancestors([])
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   372
    printlazyancestors(s, [3, 0, -1])
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   373
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   374
    # Standard example
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   375
    s = genlazyancestors([11, 13])
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   376
    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
   377
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
   378
    # 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
   379
    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
   380
    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
   381
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   382
    # Including revs
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   383
    s = genlazyancestors([11, 13], inclusive=True)
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   384
    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
   385
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   386
    # Test with stoprev
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   387
    s = genlazyancestors([11, 13], stoprev=6)
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   388
    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
   389
    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
   390
    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
   391
39475
431068d7e9db ancestor: add test showing inconsistency between __iter__ and __contains__
Yuya Nishihara <yuya@tcha.org>
parents: 36626
diff changeset
   392
    # Test with stoprev >= min(initrevs)
431068d7e9db ancestor: add test showing inconsistency between __iter__ and __contains__
Yuya Nishihara <yuya@tcha.org>
parents: 36626
diff changeset
   393
    s = genlazyancestors([11, 13], stoprev=11, inclusive=True)
431068d7e9db ancestor: add test showing inconsistency between __iter__ and __contains__
Yuya Nishihara <yuya@tcha.org>
parents: 36626
diff changeset
   394
    printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0])
431068d7e9db ancestor: add test showing inconsistency between __iter__ and __contains__
Yuya Nishihara <yuya@tcha.org>
parents: 36626
diff changeset
   395
    s = genlazyancestors([11, 13], stoprev=12, inclusive=True)
431068d7e9db ancestor: add test showing inconsistency between __iter__ and __contains__
Yuya Nishihara <yuya@tcha.org>
parents: 36626
diff changeset
   396
    printlazyancestors(s, [11, 13, 7, 9, 8, 3, 6, 4, 1, -1, 0])
19504
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   397
39536
bdb177923291 ancestor: optimize _lazyancestorsiter() for contiguous chains
Yuya Nishihara <yuya@tcha.org>
parents: 39535
diff changeset
   398
    # Contiguous chains: 5->4, 2->1 (where 1 is in seen set), 1->0
bdb177923291 ancestor: optimize _lazyancestorsiter() for contiguous chains
Yuya Nishihara <yuya@tcha.org>
parents: 39535
diff changeset
   399
    s = genlazyancestors([10, 1], inclusive=True)
bdb177923291 ancestor: optimize _lazyancestorsiter() for contiguous chains
Yuya Nishihara <yuya@tcha.org>
parents: 39535
diff changeset
   400
    printlazyancestors(s, [2, 10, 4, 5, -1, 0, 1])
bdb177923291 ancestor: optimize _lazyancestorsiter() for contiguous chains
Yuya Nishihara <yuya@tcha.org>
parents: 39535
diff changeset
   401
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   402
19504
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   403
# 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
   404
# 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
   405
# 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
   406
dagtests = [
36626
6754d0c5e1b5 py3: make test-ancestors.py pass on Python 3 with C extensions
Yuya Nishihara <yuya@tcha.org>
parents: 33475
diff changeset
   407
    (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
   408
    (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
   409
    (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
   410
]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   411
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   412
19504
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   413
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
   414
    u = uimod.ui.load()
33475
f501322512b6 parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents: 32894
diff changeset
   415
    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
   416
        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
   417
        cl = repo.changelog
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49294
diff changeset
   418
        if not hasattr(cl.index, 'ancestors'):
19504
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   419
            # C version not available
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   420
            return
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   421
30402
945f8229b30d debugcommands: move debugbuilddag
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28774
diff changeset
   422
        debugcommands.debugbuilddag(u, repo, dag)
19504
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   423
        # 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
   424
        # 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
   425
        # 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
   426
        # 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
   427
        for a in cl:
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   428
            for b in cl:
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   429
                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
   430
                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
   431
                expected = None
f501322512b6 parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents: 32894
diff changeset
   432
                if (a, b) in tests:
f501322512b6 parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents: 32894
diff changeset
   433
                    expected = tests[(a, b)]
f501322512b6 parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents: 32894
diff changeset
   434
                if cgcas != pygcas or (expected and cgcas != expected):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   435
                    print(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   436
                        "test_gca: for dag %s, gcas for %d, %d:" % (dag, a, b)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   437
                    )
28723
18e738038d78 py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27280
diff changeset
   438
                    print("  C returned:      %s" % cgcas)
18e738038d78 py3: use print_function in test-ancestor.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27280
diff changeset
   439
                    print("  Python returned: %s" % pygcas)
33475
f501322512b6 parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents: 32894
diff changeset
   440
                    if expected:
f501322512b6 parsers: fix invariant bug in find_deepest (issue5623)
Sune Foldager <cryo@cyanite.org>
parents: 32894
diff changeset
   441
                        print("  expected:        %s" % expected)
19504
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   442
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   443
23330
37c3731d8a58 test-ancestor: define a main function
Siddharth Agarwal <sid0@fb.com>
parents: 23329
diff changeset
   444
def main():
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   445
    seed = None
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   446
    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
   447
    for o, a in opts:
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   448
        if o in ('-s', '--seed'):
49294
003c0732c055 py3: remove long() compatibility code
Manuel Jacob <me@manueljacob.de>
parents: 49285
diff changeset
   449
            seed = int(a, base=0)  # accepts base 10 or 16 strings
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   450
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   451
    if seed is None:
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   452
        try:
49294
003c0732c055 py3: remove long() compatibility code
Manuel Jacob <me@manueljacob.de>
parents: 49285
diff changeset
   453
            seed = int(binascii.hexlify(os.urandom(16)), 16)
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   454
        except AttributeError:
49294
003c0732c055 py3: remove long() compatibility code
Manuel Jacob <me@manueljacob.de>
parents: 49285
diff changeset
   455
            seed = int(time.time() * 1000)
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   456
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   457
    rng = random.Random(seed)
40959
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
   458
    test_missingancestors_explicit()
23331
3b1b8f25443e test-ancestor: use random testing for missing ancestors
Siddharth Agarwal <sid0@fb.com>
parents: 23330
diff changeset
   459
    test_missingancestors(seed, rng)
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
   460
    test_lazyancestors()
19504
2fa303619b4d ancestor.deepest: ignore ninteresting while building result (issue3984)
Siddharth Agarwal <sid0@fb.com>
parents: 18091
diff changeset
   461
    test_gca()
23330
37c3731d8a58 test-ancestor: define a main function
Siddharth Agarwal <sid0@fb.com>
parents: 23329
diff changeset
   462
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41365
diff changeset
   463
23330
37c3731d8a58 test-ancestor: define a main function
Siddharth Agarwal <sid0@fb.com>
parents: 23329
diff changeset
   464
if __name__ == '__main__':
37c3731d8a58 test-ancestor: define a main function
Siddharth Agarwal <sid0@fb.com>
parents: 23329
diff changeset
   465
    main()