tests/test-parseindex2.py
author Patrick Mezard <patrick@mezard.eu>
Mon, 13 Feb 2012 16:47:31 +0100
branchstable
changeset 16123 b0c7525f826d
parent 13254 5ef5eb1f3515
child 16363 2cdd7e63211b
permissions -rw-r--r--
patch: fix fuzzing of hunks without previous lines (issue3264) When applying hunks such as: @@ -2,1 +2,2 @@ context +change fuzzing would empty the "old" block and make patchfile.apply() traceback. Instead, we apply the new block at specified location without testing. The "bottom hunk" test was removed as patch(1) has no problem applying hunk with no context in the middle of a file.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
     1
from mercurial import parsers
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
     2
from mercurial.node import nullid, nullrev
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
     3
import struct
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
     4
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
     5
# This unit test compares the return value of the original Python
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
     6
# implementation of parseindex and the new C implementation for
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
     7
# an index file with and without inlined data
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
     8
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
     9
# original python implementation
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    10
def gettype(q):
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    11
    return int(q & 0xFFFF)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    12
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    13
def offset_type(offset, type):
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    14
    return long(long(offset) << 16 | type)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    15
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    16
indexformatng = ">Qiiiiii20s12x"
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    17
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    18
def py_parseindex(data, inline) :
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    19
    s = 64
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    20
    cache = None
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    21
    index = []
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    22
    nodemap =  {nullid: nullrev}
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    23
    n = off = 0
13253
61c9bc3da402 revlog: remove lazy index
Matt Mackall <mpm@selenic.com>
parents: 8117
diff changeset
    24
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    25
    l = len(data) - s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    26
    append = index.append
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    27
    if inline:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    28
        cache = (0, data)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    29
        while off <= l:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    30
            e = struct.unpack(indexformatng, data[off:off + s])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    31
            nodemap[e[7]] = n
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    32
            append(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    33
            n += 1
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    34
            if e[1] < 0:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    35
                break
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    36
            off += e[1] + s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    37
    else:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    38
        while off <= l:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    39
            e = struct.unpack(indexformatng, data[off:off + s])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    40
            nodemap[e[7]] = n
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    41
            append(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    42
            n += 1
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    43
            off += s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    44
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    45
    e = list(index[0])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    46
    type = gettype(e[0])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    47
    e[0] = offset_type(0, type)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    48
    index[0] = tuple(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    49
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    50
    # add the magic null revision at -1
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    51
    index.append((0, 0, 0, -1, -1, -1, -1, nullid))
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    52
13254
5ef5eb1f3515 revlog: only build the nodemap on demand
Matt Mackall <mpm@selenic.com>
parents: 13253
diff changeset
    53
    return index, cache
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    54
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    55
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    56
data_inlined = '\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x01\x8c' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    57
    '\x00\x00\x04\x07\x00\x00\x00\x00\x00\x00\x15\x15\xff\xff\xff' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    58
    '\xff\xff\xff\xff\xff\xebG\x97\xb7\x1fB\x04\xcf\x13V\x81\tw\x1b' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    59
    'w\xdduR\xda\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    60
    'x\x9c\x9d\x93?O\xc30\x10\xc5\xf7|\x8a\xdb\x9a\xa8m\x06\xd8*\x95' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    61
    '\x81B\xa1\xa2\xa2R\xcb\x86Pd\x9a\x0b5$vd_\x04\xfd\xf6\x9c\xff@' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    62
    '\x11!\x0b\xd9\xec\xf7\xbbw\xe7gG6\xad6\x04\xdaN\xc0\x92\xa0$)' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    63
    '\xb1\x82\xa2\xd1%\x16\xa4\x8b7\xa9\xca\xd4-\xb2Y\x02\xfc\xc9' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    64
    '\xcaS\xf9\xaeX\xed\xb6\xd77Q\x02\x83\xd4\x19\xf5--Y\xea\xe1W' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    65
    '\xab\xed\x10\xceR\x0f_\xdf\xdf\r\xe1,\xf5\xf0\xcb\xf5 \xceR\x0f' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    66
    '_\xdc\x0e\x0e\xc3R\x0f_\xae\x96\x9b!\x9e\xa5\x1e\xbf\xdb,\x06' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    67
    '\xc7q\x9a/\x88\x82\xc3B\xea\xb5\xb4TJ\x93\xb6\x82\x0e\xe16\xe6' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    68
    'KQ\xdb\xaf\xecG\xa3\xd1 \x01\xd3\x0b_^\xe8\xaa\xa0\xae\xad\xd1' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    69
    '&\xbef\x1bz\x08\xb0|\xc9Xz\x06\xf6Z\x91\x90J\xaa\x17\x90\xaa' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    70
    '\xd2\xa6\x11$5C\xcf\xba#\xa0\x03\x02*2\x92-\xfc\xb1\x94\xdf\xe2' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    71
    '\xae\xb8\'m\x8ey0^\x85\xd3\x82\xb4\xf0`:\x9c\x00\x8a\xfd\x01' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    72
    '\xb0\xc6\x86\x8b\xdd\xae\x80\xf3\xa9\x9fd\x16\n\x00R%\x1a\x06' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    73
    '\xe9\xd8b\x98\x1d\xf4\xf3+\x9bf\x01\xd8p\x1b\xf3.\xed\x9f^g\xc3' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    74
    '^\xd9W81T\xdb\xd5\x04sx|\xf2\xeb\xd6`%?x\xed"\x831\xbf\xf3\xdc' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    75
    'b\xeb%gaY\xe1\xad\x9f\xb9f\'1w\xa9\xa5a\x83s\x82J\xb98\xbc4\x8b' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    76
    '\x83\x00\x9f$z\xb8#\xa5\xb1\xdf\x98\xd9\xec\x1b\x89O\xe3Ts\x9a4' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    77
    '\x17m\x8b\xfc\x8f\xa5\x95\x9a\xfc\xfa\xed,\xe5|\xa1\xfe\x15\xb9' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    78
    '\xbc\xb2\x93\x1f\xf2\x95\xff\xdf,\x1a\xc5\xe7\x17*\x93Oz:>\x0e'
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    79
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    80
data_non_inlined = '\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01D\x19' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    81
    '\x00\x07e\x12\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    82
    '\xff\xff\xff\xff\xd1\xf4\xbb\xb0\xbe\xfc\x13\xbd\x8c\xd3\x9d' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    83
    '\x0f\xcd\xd9;\x8c\x07\x8cJ/\x00\x00\x00\x00\x00\x00\x00\x00\x00' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    84
    '\x00\x00\x00\x00\x00\x00\x01D\x19\x00\x00\x00\x00\x00\xdf\x00' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    85
    '\x00\x01q\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\xff' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    86
    '\xff\xff\xff\xc1\x12\xb9\x04\x96\xa4Z1t\x91\xdfsJ\x90\xf0\x9bh' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    87
    '\x07l&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    88
    '\x00\x01D\xf8\x00\x00\x00\x00\x01\x1b\x00\x00\x01\xb8\x00\x00' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    89
    '\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\xff\xff\xff\xff\x02\n' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    90
    '\x0e\xc6&\xa1\x92\xae6\x0b\x02i\xfe-\xe5\xbao\x05\xd1\xe7\x00' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    91
    '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01F' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    92
    '\x13\x00\x00\x00\x00\x01\xec\x00\x00\x03\x06\x00\x00\x00\x01' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    93
    '\x00\x00\x00\x03\x00\x00\x00\x02\xff\xff\xff\xff\x12\xcb\xeby1' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    94
    '\xb6\r\x98B\xcb\x07\xbd`\x8f\x92\xd9\xc4\x84\xbdK\x00\x00\x00' \
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    95
    '\x00\x00\x00\x00\x00\x00\x00\x00\x00'
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    96
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    97
def runtest() :
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    98
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    99
    py_res_1 = py_parseindex(data_inlined, True)
13254
5ef5eb1f3515 revlog: only build the nodemap on demand
Matt Mackall <mpm@selenic.com>
parents: 13253
diff changeset
   100
    c_res_1 = parsers.parse_index2(data_inlined, True)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   101
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   102
    py_res_2 = py_parseindex(data_non_inlined, False)
13254
5ef5eb1f3515 revlog: only build the nodemap on demand
Matt Mackall <mpm@selenic.com>
parents: 13253
diff changeset
   103
    c_res_2 = parsers.parse_index2(data_non_inlined, False)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   104
8117
2b30d8488819 remove unnecessary outer parenthesis in if-statements
Martin Geisler <mg@lazybytes.net>
parents: 7110
diff changeset
   105
    if py_res_1 != c_res_1:
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   106
        print "Parse index result (with inlined data) differs!"
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   107
8117
2b30d8488819 remove unnecessary outer parenthesis in if-statements
Martin Geisler <mg@lazybytes.net>
parents: 7110
diff changeset
   108
    if py_res_2 != c_res_2:
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   109
        print "Parse index result (no inlined data) differs!"
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   111
    print "done"
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   112
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   113
runtest()