Author: Armin Rigo <ar...@tunes.org> Branch: py3.6 Changeset: r97003:7b256d2286ec Date: 2019-07-15 13:52 +0200 http://bitbucket.org/pypy/pypy/changeset/7b256d2286ec/
Log: Generate a file that hopefully covers all corner cases of startswith() and endswith() on bytes, bytearrays and unicodes. Fix. diff --git a/pypy/objspace/std/test/startswith.py b/pypy/objspace/std/test/startswith.py new file mode 100644 --- /dev/null +++ b/pypy/objspace/std/test/startswith.py @@ -0,0 +1,1657 @@ +# # This file is generated by running the following code on top of the +# # target version of CPython: +# +# import sys +# with open(sys.argv[0]) as f: +# for line in f: +# print('# ' + line.rstrip()) +# +# ranges = [None] + list(range(-4, 5)) +# +# print('') +# print('def check(s1, s2, start, end, bitmask):') +# print(' b1 = bytes(s1, "ascii")') +# print(' b2 = bytes(s2, "ascii")') +# print(' a1 = bytearray(s1, "ascii")') +# print(' a2 = bytearray(s2, "ascii")') +# print(' assert s1.startswith(s2, start, end) == ((bitmask & 1) != 0)') +# print(' assert b1.startswith(b2, start, end) == ((bitmask & 2) != 0)') +# print(' assert a1.startswith(a2, start, end) == ((bitmask & 4) != 0)') +# print(' assert s1.endswith(s2, start, end) == ((bitmask & 8) != 0)') +# print(' assert b1.endswith(b2, start, end) == ((bitmask & 16) != 0)') +# print(' assert a1.endswith(a2, start, end) == ((bitmask & 32) != 0)') +# print('') +# for len1 in range(0, 4): +# s1 = ''.join(chr(48+n) for n in range(len1)) +# for len2 in range(0, 4): +# for start in ranges: +# for end in ranges: +# s2 = s1[start:end] +# r = 0 +# b1 = bytes(s1, 'ascii') +# b2 = bytes(s2, 'ascii') +# a1 = bytearray(s1, 'ascii') +# a2 = bytearray(s2, 'ascii') +# if s1.startswith(s2, start, end): r |= 1 +# if b1.startswith(b2, start, end): r |= 2 +# if a1.startswith(a2, start, end): r |= 4 +# if s1.endswith(s2, start, end): r |= 8 +# if b1.endswith(b2, start, end): r |= 16 +# if a1.endswith(a2, start, end): r |= 32 +# line = 'check(%r, %r, %r, %r, %d)' % (s1, s2, start, end, r) +# if r != 0 and r != 63: +# line += ' # IRREGULAR' +# print(line) + +def check(s1, s2, start, end, bitmask): + b1 = bytes(s1, "ascii") + b2 = bytes(s2, "ascii") + a1 = bytearray(s1, "ascii") + a2 = bytearray(s2, "ascii") + assert s1.startswith(s2, start, end) == ((bitmask & 1) != 0) + assert b1.startswith(b2, start, end) == ((bitmask & 2) != 0) + assert a1.startswith(a2, start, end) == ((bitmask & 4) != 0) + assert s1.endswith(s2, start, end) == ((bitmask & 8) != 0) + assert b1.endswith(b2, start, end) == ((bitmask & 16) != 0) + assert a1.endswith(a2, start, end) == ((bitmask & 32) != 0) + +check('', '', None, None, 63) +check('', '', None, -4, 63) +check('', '', None, -3, 63) +check('', '', None, -2, 63) +check('', '', None, -1, 63) +check('', '', None, 0, 63) +check('', '', None, 1, 63) +check('', '', None, 2, 63) +check('', '', None, 3, 63) +check('', '', None, 4, 63) +check('', '', -4, None, 63) +check('', '', -4, -4, 63) +check('', '', -4, -3, 63) +check('', '', -4, -2, 63) +check('', '', -4, -1, 63) +check('', '', -4, 0, 63) +check('', '', -4, 1, 63) +check('', '', -4, 2, 63) +check('', '', -4, 3, 63) +check('', '', -4, 4, 63) +check('', '', -3, None, 63) +check('', '', -3, -4, 63) +check('', '', -3, -3, 63) +check('', '', -3, -2, 63) +check('', '', -3, -1, 63) +check('', '', -3, 0, 63) +check('', '', -3, 1, 63) +check('', '', -3, 2, 63) +check('', '', -3, 3, 63) +check('', '', -3, 4, 63) +check('', '', -2, None, 63) +check('', '', -2, -4, 63) +check('', '', -2, -3, 63) +check('', '', -2, -2, 63) +check('', '', -2, -1, 63) +check('', '', -2, 0, 63) +check('', '', -2, 1, 63) +check('', '', -2, 2, 63) +check('', '', -2, 3, 63) +check('', '', -2, 4, 63) +check('', '', -1, None, 63) +check('', '', -1, -4, 63) +check('', '', -1, -3, 63) +check('', '', -1, -2, 63) +check('', '', -1, -1, 63) +check('', '', -1, 0, 63) +check('', '', -1, 1, 63) +check('', '', -1, 2, 63) +check('', '', -1, 3, 63) +check('', '', -1, 4, 63) +check('', '', 0, None, 63) +check('', '', 0, -4, 63) +check('', '', 0, -3, 63) +check('', '', 0, -2, 63) +check('', '', 0, -1, 63) +check('', '', 0, 0, 63) +check('', '', 0, 1, 63) +check('', '', 0, 2, 63) +check('', '', 0, 3, 63) +check('', '', 0, 4, 63) +check('', '', 1, None, 0) +check('', '', 1, -4, 0) +check('', '', 1, -3, 0) +check('', '', 1, -2, 0) +check('', '', 1, -1, 0) +check('', '', 1, 0, 0) +check('', '', 1, 1, 0) +check('', '', 1, 2, 0) +check('', '', 1, 3, 0) +check('', '', 1, 4, 0) +check('', '', 2, None, 0) +check('', '', 2, -4, 0) +check('', '', 2, -3, 0) +check('', '', 2, -2, 0) +check('', '', 2, -1, 0) +check('', '', 2, 0, 0) +check('', '', 2, 1, 0) +check('', '', 2, 2, 0) +check('', '', 2, 3, 0) +check('', '', 2, 4, 0) +check('', '', 3, None, 0) +check('', '', 3, -4, 0) +check('', '', 3, -3, 0) +check('', '', 3, -2, 0) +check('', '', 3, -1, 0) +check('', '', 3, 0, 0) +check('', '', 3, 1, 0) +check('', '', 3, 2, 0) +check('', '', 3, 3, 0) +check('', '', 3, 4, 0) +check('', '', 4, None, 0) +check('', '', 4, -4, 0) +check('', '', 4, -3, 0) +check('', '', 4, -2, 0) +check('', '', 4, -1, 0) +check('', '', 4, 0, 0) +check('', '', 4, 1, 0) +check('', '', 4, 2, 0) +check('', '', 4, 3, 0) +check('', '', 4, 4, 0) +check('', '', None, None, 63) +check('', '', None, -4, 63) +check('', '', None, -3, 63) +check('', '', None, -2, 63) +check('', '', None, -1, 63) +check('', '', None, 0, 63) +check('', '', None, 1, 63) +check('', '', None, 2, 63) +check('', '', None, 3, 63) +check('', '', None, 4, 63) +check('', '', -4, None, 63) +check('', '', -4, -4, 63) +check('', '', -4, -3, 63) +check('', '', -4, -2, 63) +check('', '', -4, -1, 63) +check('', '', -4, 0, 63) +check('', '', -4, 1, 63) +check('', '', -4, 2, 63) +check('', '', -4, 3, 63) +check('', '', -4, 4, 63) +check('', '', -3, None, 63) +check('', '', -3, -4, 63) +check('', '', -3, -3, 63) +check('', '', -3, -2, 63) +check('', '', -3, -1, 63) +check('', '', -3, 0, 63) +check('', '', -3, 1, 63) +check('', '', -3, 2, 63) +check('', '', -3, 3, 63) +check('', '', -3, 4, 63) +check('', '', -2, None, 63) +check('', '', -2, -4, 63) +check('', '', -2, -3, 63) +check('', '', -2, -2, 63) +check('', '', -2, -1, 63) +check('', '', -2, 0, 63) +check('', '', -2, 1, 63) +check('', '', -2, 2, 63) +check('', '', -2, 3, 63) +check('', '', -2, 4, 63) +check('', '', -1, None, 63) +check('', '', -1, -4, 63) +check('', '', -1, -3, 63) +check('', '', -1, -2, 63) +check('', '', -1, -1, 63) +check('', '', -1, 0, 63) +check('', '', -1, 1, 63) +check('', '', -1, 2, 63) +check('', '', -1, 3, 63) +check('', '', -1, 4, 63) +check('', '', 0, None, 63) +check('', '', 0, -4, 63) +check('', '', 0, -3, 63) +check('', '', 0, -2, 63) +check('', '', 0, -1, 63) +check('', '', 0, 0, 63) +check('', '', 0, 1, 63) +check('', '', 0, 2, 63) +check('', '', 0, 3, 63) +check('', '', 0, 4, 63) +check('', '', 1, None, 0) +check('', '', 1, -4, 0) +check('', '', 1, -3, 0) +check('', '', 1, -2, 0) +check('', '', 1, -1, 0) +check('', '', 1, 0, 0) +check('', '', 1, 1, 0) +check('', '', 1, 2, 0) +check('', '', 1, 3, 0) +check('', '', 1, 4, 0) +check('', '', 2, None, 0) +check('', '', 2, -4, 0) +check('', '', 2, -3, 0) +check('', '', 2, -2, 0) +check('', '', 2, -1, 0) +check('', '', 2, 0, 0) +check('', '', 2, 1, 0) +check('', '', 2, 2, 0) +check('', '', 2, 3, 0) +check('', '', 2, 4, 0) +check('', '', 3, None, 0) +check('', '', 3, -4, 0) +check('', '', 3, -3, 0) +check('', '', 3, -2, 0) +check('', '', 3, -1, 0) +check('', '', 3, 0, 0) +check('', '', 3, 1, 0) +check('', '', 3, 2, 0) +check('', '', 3, 3, 0) +check('', '', 3, 4, 0) +check('', '', 4, None, 0) +check('', '', 4, -4, 0) +check('', '', 4, -3, 0) +check('', '', 4, -2, 0) +check('', '', 4, -1, 0) +check('', '', 4, 0, 0) +check('', '', 4, 1, 0) +check('', '', 4, 2, 0) +check('', '', 4, 3, 0) +check('', '', 4, 4, 0) +check('', '', None, None, 63) +check('', '', None, -4, 63) +check('', '', None, -3, 63) +check('', '', None, -2, 63) +check('', '', None, -1, 63) +check('', '', None, 0, 63) +check('', '', None, 1, 63) +check('', '', None, 2, 63) +check('', '', None, 3, 63) +check('', '', None, 4, 63) +check('', '', -4, None, 63) +check('', '', -4, -4, 63) +check('', '', -4, -3, 63) +check('', '', -4, -2, 63) +check('', '', -4, -1, 63) +check('', '', -4, 0, 63) +check('', '', -4, 1, 63) +check('', '', -4, 2, 63) +check('', '', -4, 3, 63) +check('', '', -4, 4, 63) +check('', '', -3, None, 63) +check('', '', -3, -4, 63) +check('', '', -3, -3, 63) +check('', '', -3, -2, 63) +check('', '', -3, -1, 63) +check('', '', -3, 0, 63) +check('', '', -3, 1, 63) +check('', '', -3, 2, 63) +check('', '', -3, 3, 63) +check('', '', -3, 4, 63) +check('', '', -2, None, 63) +check('', '', -2, -4, 63) +check('', '', -2, -3, 63) +check('', '', -2, -2, 63) +check('', '', -2, -1, 63) +check('', '', -2, 0, 63) +check('', '', -2, 1, 63) +check('', '', -2, 2, 63) +check('', '', -2, 3, 63) +check('', '', -2, 4, 63) +check('', '', -1, None, 63) +check('', '', -1, -4, 63) +check('', '', -1, -3, 63) +check('', '', -1, -2, 63) +check('', '', -1, -1, 63) +check('', '', -1, 0, 63) +check('', '', -1, 1, 63) +check('', '', -1, 2, 63) +check('', '', -1, 3, 63) +check('', '', -1, 4, 63) +check('', '', 0, None, 63) +check('', '', 0, -4, 63) +check('', '', 0, -3, 63) +check('', '', 0, -2, 63) +check('', '', 0, -1, 63) +check('', '', 0, 0, 63) +check('', '', 0, 1, 63) +check('', '', 0, 2, 63) +check('', '', 0, 3, 63) +check('', '', 0, 4, 63) +check('', '', 1, None, 0) +check('', '', 1, -4, 0) +check('', '', 1, -3, 0) +check('', '', 1, -2, 0) +check('', '', 1, -1, 0) +check('', '', 1, 0, 0) +check('', '', 1, 1, 0) +check('', '', 1, 2, 0) +check('', '', 1, 3, 0) +check('', '', 1, 4, 0) +check('', '', 2, None, 0) +check('', '', 2, -4, 0) +check('', '', 2, -3, 0) +check('', '', 2, -2, 0) +check('', '', 2, -1, 0) +check('', '', 2, 0, 0) +check('', '', 2, 1, 0) +check('', '', 2, 2, 0) +check('', '', 2, 3, 0) +check('', '', 2, 4, 0) +check('', '', 3, None, 0) +check('', '', 3, -4, 0) +check('', '', 3, -3, 0) +check('', '', 3, -2, 0) +check('', '', 3, -1, 0) +check('', '', 3, 0, 0) +check('', '', 3, 1, 0) +check('', '', 3, 2, 0) +check('', '', 3, 3, 0) +check('', '', 3, 4, 0) +check('', '', 4, None, 0) +check('', '', 4, -4, 0) +check('', '', 4, -3, 0) +check('', '', 4, -2, 0) +check('', '', 4, -1, 0) +check('', '', 4, 0, 0) +check('', '', 4, 1, 0) +check('', '', 4, 2, 0) +check('', '', 4, 3, 0) +check('', '', 4, 4, 0) +check('', '', None, None, 63) +check('', '', None, -4, 63) +check('', '', None, -3, 63) +check('', '', None, -2, 63) +check('', '', None, -1, 63) +check('', '', None, 0, 63) +check('', '', None, 1, 63) +check('', '', None, 2, 63) +check('', '', None, 3, 63) +check('', '', None, 4, 63) +check('', '', -4, None, 63) +check('', '', -4, -4, 63) +check('', '', -4, -3, 63) +check('', '', -4, -2, 63) +check('', '', -4, -1, 63) +check('', '', -4, 0, 63) +check('', '', -4, 1, 63) +check('', '', -4, 2, 63) +check('', '', -4, 3, 63) +check('', '', -4, 4, 63) +check('', '', -3, None, 63) +check('', '', -3, -4, 63) +check('', '', -3, -3, 63) +check('', '', -3, -2, 63) +check('', '', -3, -1, 63) +check('', '', -3, 0, 63) +check('', '', -3, 1, 63) +check('', '', -3, 2, 63) +check('', '', -3, 3, 63) +check('', '', -3, 4, 63) +check('', '', -2, None, 63) +check('', '', -2, -4, 63) +check('', '', -2, -3, 63) +check('', '', -2, -2, 63) +check('', '', -2, -1, 63) +check('', '', -2, 0, 63) +check('', '', -2, 1, 63) +check('', '', -2, 2, 63) +check('', '', -2, 3, 63) +check('', '', -2, 4, 63) +check('', '', -1, None, 63) +check('', '', -1, -4, 63) +check('', '', -1, -3, 63) +check('', '', -1, -2, 63) +check('', '', -1, -1, 63) +check('', '', -1, 0, 63) +check('', '', -1, 1, 63) +check('', '', -1, 2, 63) +check('', '', -1, 3, 63) +check('', '', -1, 4, 63) +check('', '', 0, None, 63) +check('', '', 0, -4, 63) +check('', '', 0, -3, 63) +check('', '', 0, -2, 63) +check('', '', 0, -1, 63) +check('', '', 0, 0, 63) +check('', '', 0, 1, 63) +check('', '', 0, 2, 63) +check('', '', 0, 3, 63) +check('', '', 0, 4, 63) +check('', '', 1, None, 0) +check('', '', 1, -4, 0) +check('', '', 1, -3, 0) +check('', '', 1, -2, 0) +check('', '', 1, -1, 0) +check('', '', 1, 0, 0) +check('', '', 1, 1, 0) +check('', '', 1, 2, 0) +check('', '', 1, 3, 0) +check('', '', 1, 4, 0) +check('', '', 2, None, 0) +check('', '', 2, -4, 0) +check('', '', 2, -3, 0) +check('', '', 2, -2, 0) +check('', '', 2, -1, 0) +check('', '', 2, 0, 0) +check('', '', 2, 1, 0) +check('', '', 2, 2, 0) +check('', '', 2, 3, 0) +check('', '', 2, 4, 0) +check('', '', 3, None, 0) +check('', '', 3, -4, 0) +check('', '', 3, -3, 0) +check('', '', 3, -2, 0) +check('', '', 3, -1, 0) +check('', '', 3, 0, 0) +check('', '', 3, 1, 0) +check('', '', 3, 2, 0) +check('', '', 3, 3, 0) +check('', '', 3, 4, 0) +check('', '', 4, None, 0) +check('', '', 4, -4, 0) +check('', '', 4, -3, 0) +check('', '', 4, -2, 0) +check('', '', 4, -1, 0) +check('', '', 4, 0, 0) +check('', '', 4, 1, 0) +check('', '', 4, 2, 0) +check('', '', 4, 3, 0) +check('', '', 4, 4, 0) +check('0', '0', None, None, 63) +check('0', '', None, -4, 63) +check('0', '', None, -3, 63) +check('0', '', None, -2, 63) +check('0', '', None, -1, 63) +check('0', '', None, 0, 63) +check('0', '0', None, 1, 63) +check('0', '0', None, 2, 63) +check('0', '0', None, 3, 63) +check('0', '0', None, 4, 63) +check('0', '0', -4, None, 63) +check('0', '', -4, -4, 63) +check('0', '', -4, -3, 63) +check('0', '', -4, -2, 63) +check('0', '', -4, -1, 63) +check('0', '', -4, 0, 63) +check('0', '0', -4, 1, 63) +check('0', '0', -4, 2, 63) +check('0', '0', -4, 3, 63) +check('0', '0', -4, 4, 63) +check('0', '0', -3, None, 63) +check('0', '', -3, -4, 63) +check('0', '', -3, -3, 63) +check('0', '', -3, -2, 63) +check('0', '', -3, -1, 63) +check('0', '', -3, 0, 63) +check('0', '0', -3, 1, 63) +check('0', '0', -3, 2, 63) +check('0', '0', -3, 3, 63) +check('0', '0', -3, 4, 63) +check('0', '0', -2, None, 63) +check('0', '', -2, -4, 63) +check('0', '', -2, -3, 63) +check('0', '', -2, -2, 63) +check('0', '', -2, -1, 63) +check('0', '', -2, 0, 63) +check('0', '0', -2, 1, 63) +check('0', '0', -2, 2, 63) +check('0', '0', -2, 3, 63) +check('0', '0', -2, 4, 63) +check('0', '0', -1, None, 63) +check('0', '', -1, -4, 63) +check('0', '', -1, -3, 63) +check('0', '', -1, -2, 63) +check('0', '', -1, -1, 63) +check('0', '', -1, 0, 63) +check('0', '0', -1, 1, 63) +check('0', '0', -1, 2, 63) +check('0', '0', -1, 3, 63) +check('0', '0', -1, 4, 63) +check('0', '0', 0, None, 63) +check('0', '', 0, -4, 63) +check('0', '', 0, -3, 63) +check('0', '', 0, -2, 63) +check('0', '', 0, -1, 63) +check('0', '', 0, 0, 63) +check('0', '0', 0, 1, 63) +check('0', '0', 0, 2, 63) +check('0', '0', 0, 3, 63) +check('0', '0', 0, 4, 63) +check('0', '', 1, None, 63) +check('0', '', 1, -4, 0) +check('0', '', 1, -3, 0) +check('0', '', 1, -2, 0) +check('0', '', 1, -1, 0) +check('0', '', 1, 0, 0) +check('0', '', 1, 1, 63) +check('0', '', 1, 2, 63) +check('0', '', 1, 3, 63) +check('0', '', 1, 4, 63) +check('0', '', 2, None, 0) +check('0', '', 2, -4, 0) +check('0', '', 2, -3, 0) +check('0', '', 2, -2, 0) +check('0', '', 2, -1, 0) +check('0', '', 2, 0, 0) +check('0', '', 2, 1, 0) +check('0', '', 2, 2, 0) +check('0', '', 2, 3, 0) +check('0', '', 2, 4, 0) +check('0', '', 3, None, 0) +check('0', '', 3, -4, 0) +check('0', '', 3, -3, 0) +check('0', '', 3, -2, 0) +check('0', '', 3, -1, 0) +check('0', '', 3, 0, 0) +check('0', '', 3, 1, 0) +check('0', '', 3, 2, 0) +check('0', '', 3, 3, 0) +check('0', '', 3, 4, 0) +check('0', '', 4, None, 0) +check('0', '', 4, -4, 0) +check('0', '', 4, -3, 0) +check('0', '', 4, -2, 0) +check('0', '', 4, -1, 0) +check('0', '', 4, 0, 0) +check('0', '', 4, 1, 0) +check('0', '', 4, 2, 0) +check('0', '', 4, 3, 0) +check('0', '', 4, 4, 0) +check('0', '0', None, None, 63) +check('0', '', None, -4, 63) +check('0', '', None, -3, 63) +check('0', '', None, -2, 63) +check('0', '', None, -1, 63) +check('0', '', None, 0, 63) +check('0', '0', None, 1, 63) +check('0', '0', None, 2, 63) +check('0', '0', None, 3, 63) +check('0', '0', None, 4, 63) +check('0', '0', -4, None, 63) +check('0', '', -4, -4, 63) +check('0', '', -4, -3, 63) +check('0', '', -4, -2, 63) +check('0', '', -4, -1, 63) +check('0', '', -4, 0, 63) +check('0', '0', -4, 1, 63) +check('0', '0', -4, 2, 63) +check('0', '0', -4, 3, 63) +check('0', '0', -4, 4, 63) +check('0', '0', -3, None, 63) +check('0', '', -3, -4, 63) +check('0', '', -3, -3, 63) +check('0', '', -3, -2, 63) +check('0', '', -3, -1, 63) +check('0', '', -3, 0, 63) +check('0', '0', -3, 1, 63) +check('0', '0', -3, 2, 63) +check('0', '0', -3, 3, 63) +check('0', '0', -3, 4, 63) +check('0', '0', -2, None, 63) +check('0', '', -2, -4, 63) +check('0', '', -2, -3, 63) +check('0', '', -2, -2, 63) +check('0', '', -2, -1, 63) +check('0', '', -2, 0, 63) +check('0', '0', -2, 1, 63) +check('0', '0', -2, 2, 63) +check('0', '0', -2, 3, 63) +check('0', '0', -2, 4, 63) +check('0', '0', -1, None, 63) +check('0', '', -1, -4, 63) +check('0', '', -1, -3, 63) +check('0', '', -1, -2, 63) +check('0', '', -1, -1, 63) +check('0', '', -1, 0, 63) +check('0', '0', -1, 1, 63) +check('0', '0', -1, 2, 63) +check('0', '0', -1, 3, 63) +check('0', '0', -1, 4, 63) +check('0', '0', 0, None, 63) +check('0', '', 0, -4, 63) +check('0', '', 0, -3, 63) +check('0', '', 0, -2, 63) +check('0', '', 0, -1, 63) +check('0', '', 0, 0, 63) +check('0', '0', 0, 1, 63) +check('0', '0', 0, 2, 63) +check('0', '0', 0, 3, 63) +check('0', '0', 0, 4, 63) +check('0', '', 1, None, 63) +check('0', '', 1, -4, 0) +check('0', '', 1, -3, 0) +check('0', '', 1, -2, 0) +check('0', '', 1, -1, 0) +check('0', '', 1, 0, 0) +check('0', '', 1, 1, 63) +check('0', '', 1, 2, 63) +check('0', '', 1, 3, 63) +check('0', '', 1, 4, 63) +check('0', '', 2, None, 0) +check('0', '', 2, -4, 0) +check('0', '', 2, -3, 0) +check('0', '', 2, -2, 0) +check('0', '', 2, -1, 0) +check('0', '', 2, 0, 0) +check('0', '', 2, 1, 0) +check('0', '', 2, 2, 0) +check('0', '', 2, 3, 0) +check('0', '', 2, 4, 0) +check('0', '', 3, None, 0) +check('0', '', 3, -4, 0) +check('0', '', 3, -3, 0) +check('0', '', 3, -2, 0) +check('0', '', 3, -1, 0) +check('0', '', 3, 0, 0) +check('0', '', 3, 1, 0) +check('0', '', 3, 2, 0) +check('0', '', 3, 3, 0) +check('0', '', 3, 4, 0) +check('0', '', 4, None, 0) +check('0', '', 4, -4, 0) +check('0', '', 4, -3, 0) +check('0', '', 4, -2, 0) +check('0', '', 4, -1, 0) +check('0', '', 4, 0, 0) +check('0', '', 4, 1, 0) +check('0', '', 4, 2, 0) +check('0', '', 4, 3, 0) +check('0', '', 4, 4, 0) +check('0', '0', None, None, 63) +check('0', '', None, -4, 63) +check('0', '', None, -3, 63) +check('0', '', None, -2, 63) +check('0', '', None, -1, 63) +check('0', '', None, 0, 63) +check('0', '0', None, 1, 63) +check('0', '0', None, 2, 63) +check('0', '0', None, 3, 63) +check('0', '0', None, 4, 63) +check('0', '0', -4, None, 63) +check('0', '', -4, -4, 63) +check('0', '', -4, -3, 63) +check('0', '', -4, -2, 63) +check('0', '', -4, -1, 63) +check('0', '', -4, 0, 63) +check('0', '0', -4, 1, 63) +check('0', '0', -4, 2, 63) +check('0', '0', -4, 3, 63) +check('0', '0', -4, 4, 63) +check('0', '0', -3, None, 63) +check('0', '', -3, -4, 63) +check('0', '', -3, -3, 63) +check('0', '', -3, -2, 63) +check('0', '', -3, -1, 63) +check('0', '', -3, 0, 63) +check('0', '0', -3, 1, 63) +check('0', '0', -3, 2, 63) +check('0', '0', -3, 3, 63) +check('0', '0', -3, 4, 63) +check('0', '0', -2, None, 63) +check('0', '', -2, -4, 63) +check('0', '', -2, -3, 63) +check('0', '', -2, -2, 63) +check('0', '', -2, -1, 63) +check('0', '', -2, 0, 63) +check('0', '0', -2, 1, 63) +check('0', '0', -2, 2, 63) +check('0', '0', -2, 3, 63) +check('0', '0', -2, 4, 63) +check('0', '0', -1, None, 63) +check('0', '', -1, -4, 63) +check('0', '', -1, -3, 63) +check('0', '', -1, -2, 63) +check('0', '', -1, -1, 63) +check('0', '', -1, 0, 63) +check('0', '0', -1, 1, 63) +check('0', '0', -1, 2, 63) +check('0', '0', -1, 3, 63) +check('0', '0', -1, 4, 63) +check('0', '0', 0, None, 63) +check('0', '', 0, -4, 63) +check('0', '', 0, -3, 63) +check('0', '', 0, -2, 63) +check('0', '', 0, -1, 63) +check('0', '', 0, 0, 63) +check('0', '0', 0, 1, 63) +check('0', '0', 0, 2, 63) +check('0', '0', 0, 3, 63) +check('0', '0', 0, 4, 63) +check('0', '', 1, None, 63) +check('0', '', 1, -4, 0) +check('0', '', 1, -3, 0) +check('0', '', 1, -2, 0) +check('0', '', 1, -1, 0) +check('0', '', 1, 0, 0) +check('0', '', 1, 1, 63) +check('0', '', 1, 2, 63) +check('0', '', 1, 3, 63) +check('0', '', 1, 4, 63) +check('0', '', 2, None, 0) +check('0', '', 2, -4, 0) +check('0', '', 2, -3, 0) +check('0', '', 2, -2, 0) +check('0', '', 2, -1, 0) +check('0', '', 2, 0, 0) +check('0', '', 2, 1, 0) +check('0', '', 2, 2, 0) +check('0', '', 2, 3, 0) +check('0', '', 2, 4, 0) +check('0', '', 3, None, 0) +check('0', '', 3, -4, 0) +check('0', '', 3, -3, 0) +check('0', '', 3, -2, 0) +check('0', '', 3, -1, 0) +check('0', '', 3, 0, 0) +check('0', '', 3, 1, 0) +check('0', '', 3, 2, 0) +check('0', '', 3, 3, 0) +check('0', '', 3, 4, 0) +check('0', '', 4, None, 0) +check('0', '', 4, -4, 0) +check('0', '', 4, -3, 0) +check('0', '', 4, -2, 0) +check('0', '', 4, -1, 0) +check('0', '', 4, 0, 0) +check('0', '', 4, 1, 0) +check('0', '', 4, 2, 0) +check('0', '', 4, 3, 0) +check('0', '', 4, 4, 0) +check('0', '0', None, None, 63) +check('0', '', None, -4, 63) +check('0', '', None, -3, 63) +check('0', '', None, -2, 63) +check('0', '', None, -1, 63) +check('0', '', None, 0, 63) +check('0', '0', None, 1, 63) +check('0', '0', None, 2, 63) +check('0', '0', None, 3, 63) +check('0', '0', None, 4, 63) +check('0', '0', -4, None, 63) +check('0', '', -4, -4, 63) +check('0', '', -4, -3, 63) +check('0', '', -4, -2, 63) +check('0', '', -4, -1, 63) +check('0', '', -4, 0, 63) +check('0', '0', -4, 1, 63) +check('0', '0', -4, 2, 63) +check('0', '0', -4, 3, 63) +check('0', '0', -4, 4, 63) +check('0', '0', -3, None, 63) +check('0', '', -3, -4, 63) +check('0', '', -3, -3, 63) +check('0', '', -3, -2, 63) +check('0', '', -3, -1, 63) +check('0', '', -3, 0, 63) +check('0', '0', -3, 1, 63) +check('0', '0', -3, 2, 63) +check('0', '0', -3, 3, 63) +check('0', '0', -3, 4, 63) +check('0', '0', -2, None, 63) +check('0', '', -2, -4, 63) +check('0', '', -2, -3, 63) +check('0', '', -2, -2, 63) +check('0', '', -2, -1, 63) +check('0', '', -2, 0, 63) +check('0', '0', -2, 1, 63) +check('0', '0', -2, 2, 63) +check('0', '0', -2, 3, 63) +check('0', '0', -2, 4, 63) +check('0', '0', -1, None, 63) +check('0', '', -1, -4, 63) +check('0', '', -1, -3, 63) +check('0', '', -1, -2, 63) +check('0', '', -1, -1, 63) +check('0', '', -1, 0, 63) +check('0', '0', -1, 1, 63) +check('0', '0', -1, 2, 63) +check('0', '0', -1, 3, 63) +check('0', '0', -1, 4, 63) +check('0', '0', 0, None, 63) +check('0', '', 0, -4, 63) +check('0', '', 0, -3, 63) +check('0', '', 0, -2, 63) +check('0', '', 0, -1, 63) +check('0', '', 0, 0, 63) +check('0', '0', 0, 1, 63) +check('0', '0', 0, 2, 63) +check('0', '0', 0, 3, 63) +check('0', '0', 0, 4, 63) +check('0', '', 1, None, 63) +check('0', '', 1, -4, 0) +check('0', '', 1, -3, 0) +check('0', '', 1, -2, 0) +check('0', '', 1, -1, 0) +check('0', '', 1, 0, 0) +check('0', '', 1, 1, 63) +check('0', '', 1, 2, 63) +check('0', '', 1, 3, 63) +check('0', '', 1, 4, 63) +check('0', '', 2, None, 0) +check('0', '', 2, -4, 0) +check('0', '', 2, -3, 0) +check('0', '', 2, -2, 0) +check('0', '', 2, -1, 0) +check('0', '', 2, 0, 0) +check('0', '', 2, 1, 0) +check('0', '', 2, 2, 0) +check('0', '', 2, 3, 0) +check('0', '', 2, 4, 0) +check('0', '', 3, None, 0) +check('0', '', 3, -4, 0) +check('0', '', 3, -3, 0) +check('0', '', 3, -2, 0) +check('0', '', 3, -1, 0) +check('0', '', 3, 0, 0) +check('0', '', 3, 1, 0) +check('0', '', 3, 2, 0) +check('0', '', 3, 3, 0) +check('0', '', 3, 4, 0) +check('0', '', 4, None, 0) +check('0', '', 4, -4, 0) +check('0', '', 4, -3, 0) +check('0', '', 4, -2, 0) +check('0', '', 4, -1, 0) +check('0', '', 4, 0, 0) +check('0', '', 4, 1, 0) +check('0', '', 4, 2, 0) +check('0', '', 4, 3, 0) +check('0', '', 4, 4, 0) +check('01', '01', None, None, 63) +check('01', '', None, -4, 63) +check('01', '', None, -3, 63) +check('01', '', None, -2, 63) +check('01', '0', None, -1, 63) +check('01', '', None, 0, 63) +check('01', '0', None, 1, 63) +check('01', '01', None, 2, 63) +check('01', '01', None, 3, 63) +check('01', '01', None, 4, 63) +check('01', '01', -4, None, 63) +check('01', '', -4, -4, 63) +check('01', '', -4, -3, 63) +check('01', '', -4, -2, 63) +check('01', '0', -4, -1, 63) +check('01', '', -4, 0, 63) +check('01', '0', -4, 1, 63) +check('01', '01', -4, 2, 63) +check('01', '01', -4, 3, 63) +check('01', '01', -4, 4, 63) +check('01', '01', -3, None, 63) +check('01', '', -3, -4, 63) +check('01', '', -3, -3, 63) +check('01', '', -3, -2, 63) +check('01', '0', -3, -1, 63) +check('01', '', -3, 0, 63) +check('01', '0', -3, 1, 63) +check('01', '01', -3, 2, 63) +check('01', '01', -3, 3, 63) +check('01', '01', -3, 4, 63) +check('01', '01', -2, None, 63) +check('01', '', -2, -4, 63) +check('01', '', -2, -3, 63) +check('01', '', -2, -2, 63) +check('01', '0', -2, -1, 63) +check('01', '', -2, 0, 63) +check('01', '0', -2, 1, 63) +check('01', '01', -2, 2, 63) +check('01', '01', -2, 3, 63) +check('01', '01', -2, 4, 63) +check('01', '1', -1, None, 63) +check('01', '', -1, -4, 0) +check('01', '', -1, -3, 0) +check('01', '', -1, -2, 0) +check('01', '', -1, -1, 63) +check('01', '', -1, 0, 0) +check('01', '', -1, 1, 63) +check('01', '1', -1, 2, 63) +check('01', '1', -1, 3, 63) +check('01', '1', -1, 4, 63) +check('01', '01', 0, None, 63) +check('01', '', 0, -4, 63) +check('01', '', 0, -3, 63) +check('01', '', 0, -2, 63) +check('01', '0', 0, -1, 63) +check('01', '', 0, 0, 63) +check('01', '0', 0, 1, 63) +check('01', '01', 0, 2, 63) +check('01', '01', 0, 3, 63) +check('01', '01', 0, 4, 63) +check('01', '1', 1, None, 63) +check('01', '', 1, -4, 0) +check('01', '', 1, -3, 0) +check('01', '', 1, -2, 0) +check('01', '', 1, -1, 63) +check('01', '', 1, 0, 0) +check('01', '', 1, 1, 63) +check('01', '1', 1, 2, 63) +check('01', '1', 1, 3, 63) +check('01', '1', 1, 4, 63) +check('01', '', 2, None, 63) +check('01', '', 2, -4, 0) +check('01', '', 2, -3, 0) +check('01', '', 2, -2, 0) +check('01', '', 2, -1, 0) +check('01', '', 2, 0, 0) +check('01', '', 2, 1, 0) +check('01', '', 2, 2, 63) +check('01', '', 2, 3, 63) +check('01', '', 2, 4, 63) +check('01', '', 3, None, 0) +check('01', '', 3, -4, 0) +check('01', '', 3, -3, 0) +check('01', '', 3, -2, 0) +check('01', '', 3, -1, 0) +check('01', '', 3, 0, 0) +check('01', '', 3, 1, 0) +check('01', '', 3, 2, 0) +check('01', '', 3, 3, 0) +check('01', '', 3, 4, 0) +check('01', '', 4, None, 0) +check('01', '', 4, -4, 0) +check('01', '', 4, -3, 0) +check('01', '', 4, -2, 0) +check('01', '', 4, -1, 0) +check('01', '', 4, 0, 0) +check('01', '', 4, 1, 0) +check('01', '', 4, 2, 0) +check('01', '', 4, 3, 0) +check('01', '', 4, 4, 0) +check('01', '01', None, None, 63) +check('01', '', None, -4, 63) +check('01', '', None, -3, 63) +check('01', '', None, -2, 63) +check('01', '0', None, -1, 63) +check('01', '', None, 0, 63) +check('01', '0', None, 1, 63) +check('01', '01', None, 2, 63) +check('01', '01', None, 3, 63) +check('01', '01', None, 4, 63) +check('01', '01', -4, None, 63) +check('01', '', -4, -4, 63) +check('01', '', -4, -3, 63) +check('01', '', -4, -2, 63) +check('01', '0', -4, -1, 63) +check('01', '', -4, 0, 63) +check('01', '0', -4, 1, 63) +check('01', '01', -4, 2, 63) +check('01', '01', -4, 3, 63) +check('01', '01', -4, 4, 63) +check('01', '01', -3, None, 63) +check('01', '', -3, -4, 63) +check('01', '', -3, -3, 63) +check('01', '', -3, -2, 63) +check('01', '0', -3, -1, 63) +check('01', '', -3, 0, 63) +check('01', '0', -3, 1, 63) +check('01', '01', -3, 2, 63) +check('01', '01', -3, 3, 63) +check('01', '01', -3, 4, 63) +check('01', '01', -2, None, 63) +check('01', '', -2, -4, 63) +check('01', '', -2, -3, 63) +check('01', '', -2, -2, 63) +check('01', '0', -2, -1, 63) +check('01', '', -2, 0, 63) +check('01', '0', -2, 1, 63) +check('01', '01', -2, 2, 63) +check('01', '01', -2, 3, 63) +check('01', '01', -2, 4, 63) +check('01', '1', -1, None, 63) +check('01', '', -1, -4, 0) +check('01', '', -1, -3, 0) +check('01', '', -1, -2, 0) +check('01', '', -1, -1, 63) +check('01', '', -1, 0, 0) +check('01', '', -1, 1, 63) +check('01', '1', -1, 2, 63) +check('01', '1', -1, 3, 63) +check('01', '1', -1, 4, 63) +check('01', '01', 0, None, 63) +check('01', '', 0, -4, 63) +check('01', '', 0, -3, 63) +check('01', '', 0, -2, 63) +check('01', '0', 0, -1, 63) +check('01', '', 0, 0, 63) +check('01', '0', 0, 1, 63) +check('01', '01', 0, 2, 63) +check('01', '01', 0, 3, 63) +check('01', '01', 0, 4, 63) +check('01', '1', 1, None, 63) +check('01', '', 1, -4, 0) +check('01', '', 1, -3, 0) +check('01', '', 1, -2, 0) +check('01', '', 1, -1, 63) +check('01', '', 1, 0, 0) +check('01', '', 1, 1, 63) +check('01', '1', 1, 2, 63) +check('01', '1', 1, 3, 63) +check('01', '1', 1, 4, 63) +check('01', '', 2, None, 63) +check('01', '', 2, -4, 0) +check('01', '', 2, -3, 0) +check('01', '', 2, -2, 0) +check('01', '', 2, -1, 0) +check('01', '', 2, 0, 0) +check('01', '', 2, 1, 0) +check('01', '', 2, 2, 63) +check('01', '', 2, 3, 63) +check('01', '', 2, 4, 63) +check('01', '', 3, None, 0) +check('01', '', 3, -4, 0) +check('01', '', 3, -3, 0) +check('01', '', 3, -2, 0) +check('01', '', 3, -1, 0) +check('01', '', 3, 0, 0) +check('01', '', 3, 1, 0) +check('01', '', 3, 2, 0) +check('01', '', 3, 3, 0) +check('01', '', 3, 4, 0) +check('01', '', 4, None, 0) +check('01', '', 4, -4, 0) +check('01', '', 4, -3, 0) +check('01', '', 4, -2, 0) +check('01', '', 4, -1, 0) +check('01', '', 4, 0, 0) +check('01', '', 4, 1, 0) +check('01', '', 4, 2, 0) +check('01', '', 4, 3, 0) +check('01', '', 4, 4, 0) +check('01', '01', None, None, 63) +check('01', '', None, -4, 63) +check('01', '', None, -3, 63) +check('01', '', None, -2, 63) +check('01', '0', None, -1, 63) +check('01', '', None, 0, 63) +check('01', '0', None, 1, 63) +check('01', '01', None, 2, 63) +check('01', '01', None, 3, 63) +check('01', '01', None, 4, 63) +check('01', '01', -4, None, 63) +check('01', '', -4, -4, 63) +check('01', '', -4, -3, 63) +check('01', '', -4, -2, 63) +check('01', '0', -4, -1, 63) +check('01', '', -4, 0, 63) +check('01', '0', -4, 1, 63) +check('01', '01', -4, 2, 63) +check('01', '01', -4, 3, 63) +check('01', '01', -4, 4, 63) +check('01', '01', -3, None, 63) +check('01', '', -3, -4, 63) +check('01', '', -3, -3, 63) +check('01', '', -3, -2, 63) +check('01', '0', -3, -1, 63) +check('01', '', -3, 0, 63) +check('01', '0', -3, 1, 63) +check('01', '01', -3, 2, 63) +check('01', '01', -3, 3, 63) +check('01', '01', -3, 4, 63) +check('01', '01', -2, None, 63) +check('01', '', -2, -4, 63) +check('01', '', -2, -3, 63) +check('01', '', -2, -2, 63) +check('01', '0', -2, -1, 63) +check('01', '', -2, 0, 63) +check('01', '0', -2, 1, 63) +check('01', '01', -2, 2, 63) +check('01', '01', -2, 3, 63) +check('01', '01', -2, 4, 63) +check('01', '1', -1, None, 63) +check('01', '', -1, -4, 0) +check('01', '', -1, -3, 0) +check('01', '', -1, -2, 0) +check('01', '', -1, -1, 63) +check('01', '', -1, 0, 0) +check('01', '', -1, 1, 63) +check('01', '1', -1, 2, 63) +check('01', '1', -1, 3, 63) +check('01', '1', -1, 4, 63) +check('01', '01', 0, None, 63) +check('01', '', 0, -4, 63) +check('01', '', 0, -3, 63) +check('01', '', 0, -2, 63) +check('01', '0', 0, -1, 63) +check('01', '', 0, 0, 63) +check('01', '0', 0, 1, 63) +check('01', '01', 0, 2, 63) +check('01', '01', 0, 3, 63) +check('01', '01', 0, 4, 63) +check('01', '1', 1, None, 63) +check('01', '', 1, -4, 0) +check('01', '', 1, -3, 0) +check('01', '', 1, -2, 0) +check('01', '', 1, -1, 63) +check('01', '', 1, 0, 0) +check('01', '', 1, 1, 63) +check('01', '1', 1, 2, 63) +check('01', '1', 1, 3, 63) +check('01', '1', 1, 4, 63) +check('01', '', 2, None, 63) +check('01', '', 2, -4, 0) +check('01', '', 2, -3, 0) +check('01', '', 2, -2, 0) +check('01', '', 2, -1, 0) +check('01', '', 2, 0, 0) +check('01', '', 2, 1, 0) +check('01', '', 2, 2, 63) +check('01', '', 2, 3, 63) +check('01', '', 2, 4, 63) +check('01', '', 3, None, 0) +check('01', '', 3, -4, 0) +check('01', '', 3, -3, 0) +check('01', '', 3, -2, 0) +check('01', '', 3, -1, 0) +check('01', '', 3, 0, 0) +check('01', '', 3, 1, 0) +check('01', '', 3, 2, 0) +check('01', '', 3, 3, 0) +check('01', '', 3, 4, 0) +check('01', '', 4, None, 0) +check('01', '', 4, -4, 0) +check('01', '', 4, -3, 0) +check('01', '', 4, -2, 0) +check('01', '', 4, -1, 0) +check('01', '', 4, 0, 0) +check('01', '', 4, 1, 0) +check('01', '', 4, 2, 0) +check('01', '', 4, 3, 0) +check('01', '', 4, 4, 0) +check('01', '01', None, None, 63) +check('01', '', None, -4, 63) +check('01', '', None, -3, 63) +check('01', '', None, -2, 63) +check('01', '0', None, -1, 63) +check('01', '', None, 0, 63) +check('01', '0', None, 1, 63) +check('01', '01', None, 2, 63) +check('01', '01', None, 3, 63) +check('01', '01', None, 4, 63) +check('01', '01', -4, None, 63) +check('01', '', -4, -4, 63) +check('01', '', -4, -3, 63) +check('01', '', -4, -2, 63) +check('01', '0', -4, -1, 63) +check('01', '', -4, 0, 63) +check('01', '0', -4, 1, 63) +check('01', '01', -4, 2, 63) +check('01', '01', -4, 3, 63) +check('01', '01', -4, 4, 63) +check('01', '01', -3, None, 63) +check('01', '', -3, -4, 63) +check('01', '', -3, -3, 63) +check('01', '', -3, -2, 63) +check('01', '0', -3, -1, 63) +check('01', '', -3, 0, 63) +check('01', '0', -3, 1, 63) +check('01', '01', -3, 2, 63) +check('01', '01', -3, 3, 63) +check('01', '01', -3, 4, 63) +check('01', '01', -2, None, 63) +check('01', '', -2, -4, 63) +check('01', '', -2, -3, 63) +check('01', '', -2, -2, 63) +check('01', '0', -2, -1, 63) +check('01', '', -2, 0, 63) +check('01', '0', -2, 1, 63) +check('01', '01', -2, 2, 63) +check('01', '01', -2, 3, 63) +check('01', '01', -2, 4, 63) +check('01', '1', -1, None, 63) +check('01', '', -1, -4, 0) +check('01', '', -1, -3, 0) +check('01', '', -1, -2, 0) +check('01', '', -1, -1, 63) +check('01', '', -1, 0, 0) +check('01', '', -1, 1, 63) +check('01', '1', -1, 2, 63) +check('01', '1', -1, 3, 63) +check('01', '1', -1, 4, 63) +check('01', '01', 0, None, 63) +check('01', '', 0, -4, 63) +check('01', '', 0, -3, 63) +check('01', '', 0, -2, 63) +check('01', '0', 0, -1, 63) +check('01', '', 0, 0, 63) +check('01', '0', 0, 1, 63) +check('01', '01', 0, 2, 63) +check('01', '01', 0, 3, 63) +check('01', '01', 0, 4, 63) +check('01', '1', 1, None, 63) +check('01', '', 1, -4, 0) +check('01', '', 1, -3, 0) +check('01', '', 1, -2, 0) +check('01', '', 1, -1, 63) +check('01', '', 1, 0, 0) +check('01', '', 1, 1, 63) +check('01', '1', 1, 2, 63) +check('01', '1', 1, 3, 63) +check('01', '1', 1, 4, 63) +check('01', '', 2, None, 63) +check('01', '', 2, -4, 0) +check('01', '', 2, -3, 0) +check('01', '', 2, -2, 0) +check('01', '', 2, -1, 0) +check('01', '', 2, 0, 0) +check('01', '', 2, 1, 0) +check('01', '', 2, 2, 63) +check('01', '', 2, 3, 63) +check('01', '', 2, 4, 63) +check('01', '', 3, None, 0) +check('01', '', 3, -4, 0) +check('01', '', 3, -3, 0) +check('01', '', 3, -2, 0) +check('01', '', 3, -1, 0) +check('01', '', 3, 0, 0) +check('01', '', 3, 1, 0) +check('01', '', 3, 2, 0) +check('01', '', 3, 3, 0) +check('01', '', 3, 4, 0) +check('01', '', 4, None, 0) +check('01', '', 4, -4, 0) +check('01', '', 4, -3, 0) +check('01', '', 4, -2, 0) +check('01', '', 4, -1, 0) +check('01', '', 4, 0, 0) +check('01', '', 4, 1, 0) +check('01', '', 4, 2, 0) +check('01', '', 4, 3, 0) +check('01', '', 4, 4, 0) +check('012', '012', None, None, 63) +check('012', '', None, -4, 63) +check('012', '', None, -3, 63) +check('012', '0', None, -2, 63) +check('012', '01', None, -1, 63) +check('012', '', None, 0, 63) +check('012', '0', None, 1, 63) +check('012', '01', None, 2, 63) +check('012', '012', None, 3, 63) +check('012', '012', None, 4, 63) +check('012', '012', -4, None, 63) +check('012', '', -4, -4, 63) +check('012', '', -4, -3, 63) +check('012', '0', -4, -2, 63) +check('012', '01', -4, -1, 63) +check('012', '', -4, 0, 63) +check('012', '0', -4, 1, 63) +check('012', '01', -4, 2, 63) +check('012', '012', -4, 3, 63) +check('012', '012', -4, 4, 63) +check('012', '012', -3, None, 63) +check('012', '', -3, -4, 63) +check('012', '', -3, -3, 63) +check('012', '0', -3, -2, 63) +check('012', '01', -3, -1, 63) +check('012', '', -3, 0, 63) +check('012', '0', -3, 1, 63) +check('012', '01', -3, 2, 63) +check('012', '012', -3, 3, 63) +check('012', '012', -3, 4, 63) +check('012', '12', -2, None, 63) +check('012', '', -2, -4, 0) +check('012', '', -2, -3, 0) +check('012', '', -2, -2, 63) +check('012', '1', -2, -1, 63) +check('012', '', -2, 0, 0) +check('012', '', -2, 1, 63) +check('012', '1', -2, 2, 63) +check('012', '12', -2, 3, 63) +check('012', '12', -2, 4, 63) +check('012', '2', -1, None, 63) +check('012', '', -1, -4, 0) +check('012', '', -1, -3, 0) +check('012', '', -1, -2, 0) +check('012', '', -1, -1, 63) +check('012', '', -1, 0, 0) +check('012', '', -1, 1, 0) +check('012', '', -1, 2, 63) +check('012', '2', -1, 3, 63) +check('012', '2', -1, 4, 63) +check('012', '012', 0, None, 63) +check('012', '', 0, -4, 63) +check('012', '', 0, -3, 63) +check('012', '0', 0, -2, 63) +check('012', '01', 0, -1, 63) +check('012', '', 0, 0, 63) +check('012', '0', 0, 1, 63) +check('012', '01', 0, 2, 63) +check('012', '012', 0, 3, 63) +check('012', '012', 0, 4, 63) +check('012', '12', 1, None, 63) +check('012', '', 1, -4, 0) +check('012', '', 1, -3, 0) +check('012', '', 1, -2, 63) +check('012', '1', 1, -1, 63) +check('012', '', 1, 0, 0) +check('012', '', 1, 1, 63) +check('012', '1', 1, 2, 63) +check('012', '12', 1, 3, 63) +check('012', '12', 1, 4, 63) +check('012', '2', 2, None, 63) +check('012', '', 2, -4, 0) +check('012', '', 2, -3, 0) +check('012', '', 2, -2, 0) +check('012', '', 2, -1, 63) +check('012', '', 2, 0, 0) +check('012', '', 2, 1, 0) +check('012', '', 2, 2, 63) +check('012', '2', 2, 3, 63) +check('012', '2', 2, 4, 63) +check('012', '', 3, None, 63) +check('012', '', 3, -4, 0) +check('012', '', 3, -3, 0) +check('012', '', 3, -2, 0) +check('012', '', 3, -1, 0) +check('012', '', 3, 0, 0) +check('012', '', 3, 1, 0) +check('012', '', 3, 2, 0) +check('012', '', 3, 3, 63) +check('012', '', 3, 4, 63) +check('012', '', 4, None, 0) +check('012', '', 4, -4, 0) +check('012', '', 4, -3, 0) +check('012', '', 4, -2, 0) +check('012', '', 4, -1, 0) +check('012', '', 4, 0, 0) +check('012', '', 4, 1, 0) +check('012', '', 4, 2, 0) +check('012', '', 4, 3, 0) +check('012', '', 4, 4, 0) +check('012', '012', None, None, 63) +check('012', '', None, -4, 63) +check('012', '', None, -3, 63) +check('012', '0', None, -2, 63) +check('012', '01', None, -1, 63) +check('012', '', None, 0, 63) +check('012', '0', None, 1, 63) +check('012', '01', None, 2, 63) +check('012', '012', None, 3, 63) +check('012', '012', None, 4, 63) +check('012', '012', -4, None, 63) +check('012', '', -4, -4, 63) +check('012', '', -4, -3, 63) +check('012', '0', -4, -2, 63) +check('012', '01', -4, -1, 63) +check('012', '', -4, 0, 63) +check('012', '0', -4, 1, 63) +check('012', '01', -4, 2, 63) +check('012', '012', -4, 3, 63) +check('012', '012', -4, 4, 63) +check('012', '012', -3, None, 63) +check('012', '', -3, -4, 63) +check('012', '', -3, -3, 63) +check('012', '0', -3, -2, 63) +check('012', '01', -3, -1, 63) +check('012', '', -3, 0, 63) +check('012', '0', -3, 1, 63) +check('012', '01', -3, 2, 63) +check('012', '012', -3, 3, 63) +check('012', '012', -3, 4, 63) +check('012', '12', -2, None, 63) +check('012', '', -2, -4, 0) +check('012', '', -2, -3, 0) +check('012', '', -2, -2, 63) +check('012', '1', -2, -1, 63) +check('012', '', -2, 0, 0) +check('012', '', -2, 1, 63) +check('012', '1', -2, 2, 63) +check('012', '12', -2, 3, 63) +check('012', '12', -2, 4, 63) +check('012', '2', -1, None, 63) +check('012', '', -1, -4, 0) +check('012', '', -1, -3, 0) +check('012', '', -1, -2, 0) +check('012', '', -1, -1, 63) +check('012', '', -1, 0, 0) +check('012', '', -1, 1, 0) +check('012', '', -1, 2, 63) +check('012', '2', -1, 3, 63) +check('012', '2', -1, 4, 63) +check('012', '012', 0, None, 63) +check('012', '', 0, -4, 63) +check('012', '', 0, -3, 63) +check('012', '0', 0, -2, 63) +check('012', '01', 0, -1, 63) +check('012', '', 0, 0, 63) +check('012', '0', 0, 1, 63) +check('012', '01', 0, 2, 63) +check('012', '012', 0, 3, 63) +check('012', '012', 0, 4, 63) +check('012', '12', 1, None, 63) +check('012', '', 1, -4, 0) +check('012', '', 1, -3, 0) +check('012', '', 1, -2, 63) +check('012', '1', 1, -1, 63) +check('012', '', 1, 0, 0) +check('012', '', 1, 1, 63) +check('012', '1', 1, 2, 63) +check('012', '12', 1, 3, 63) +check('012', '12', 1, 4, 63) +check('012', '2', 2, None, 63) +check('012', '', 2, -4, 0) +check('012', '', 2, -3, 0) +check('012', '', 2, -2, 0) +check('012', '', 2, -1, 63) +check('012', '', 2, 0, 0) +check('012', '', 2, 1, 0) +check('012', '', 2, 2, 63) +check('012', '2', 2, 3, 63) +check('012', '2', 2, 4, 63) +check('012', '', 3, None, 63) +check('012', '', 3, -4, 0) +check('012', '', 3, -3, 0) +check('012', '', 3, -2, 0) +check('012', '', 3, -1, 0) +check('012', '', 3, 0, 0) +check('012', '', 3, 1, 0) +check('012', '', 3, 2, 0) +check('012', '', 3, 3, 63) +check('012', '', 3, 4, 63) +check('012', '', 4, None, 0) +check('012', '', 4, -4, 0) +check('012', '', 4, -3, 0) +check('012', '', 4, -2, 0) +check('012', '', 4, -1, 0) +check('012', '', 4, 0, 0) +check('012', '', 4, 1, 0) +check('012', '', 4, 2, 0) +check('012', '', 4, 3, 0) +check('012', '', 4, 4, 0) +check('012', '012', None, None, 63) +check('012', '', None, -4, 63) +check('012', '', None, -3, 63) +check('012', '0', None, -2, 63) +check('012', '01', None, -1, 63) +check('012', '', None, 0, 63) +check('012', '0', None, 1, 63) +check('012', '01', None, 2, 63) +check('012', '012', None, 3, 63) +check('012', '012', None, 4, 63) +check('012', '012', -4, None, 63) +check('012', '', -4, -4, 63) +check('012', '', -4, -3, 63) +check('012', '0', -4, -2, 63) +check('012', '01', -4, -1, 63) +check('012', '', -4, 0, 63) +check('012', '0', -4, 1, 63) +check('012', '01', -4, 2, 63) +check('012', '012', -4, 3, 63) +check('012', '012', -4, 4, 63) +check('012', '012', -3, None, 63) +check('012', '', -3, -4, 63) +check('012', '', -3, -3, 63) +check('012', '0', -3, -2, 63) +check('012', '01', -3, -1, 63) +check('012', '', -3, 0, 63) +check('012', '0', -3, 1, 63) +check('012', '01', -3, 2, 63) +check('012', '012', -3, 3, 63) +check('012', '012', -3, 4, 63) +check('012', '12', -2, None, 63) +check('012', '', -2, -4, 0) +check('012', '', -2, -3, 0) +check('012', '', -2, -2, 63) +check('012', '1', -2, -1, 63) +check('012', '', -2, 0, 0) +check('012', '', -2, 1, 63) +check('012', '1', -2, 2, 63) +check('012', '12', -2, 3, 63) +check('012', '12', -2, 4, 63) +check('012', '2', -1, None, 63) +check('012', '', -1, -4, 0) +check('012', '', -1, -3, 0) +check('012', '', -1, -2, 0) +check('012', '', -1, -1, 63) +check('012', '', -1, 0, 0) +check('012', '', -1, 1, 0) +check('012', '', -1, 2, 63) +check('012', '2', -1, 3, 63) +check('012', '2', -1, 4, 63) +check('012', '012', 0, None, 63) +check('012', '', 0, -4, 63) +check('012', '', 0, -3, 63) +check('012', '0', 0, -2, 63) +check('012', '01', 0, -1, 63) +check('012', '', 0, 0, 63) +check('012', '0', 0, 1, 63) +check('012', '01', 0, 2, 63) +check('012', '012', 0, 3, 63) +check('012', '012', 0, 4, 63) +check('012', '12', 1, None, 63) +check('012', '', 1, -4, 0) +check('012', '', 1, -3, 0) +check('012', '', 1, -2, 63) +check('012', '1', 1, -1, 63) +check('012', '', 1, 0, 0) +check('012', '', 1, 1, 63) +check('012', '1', 1, 2, 63) +check('012', '12', 1, 3, 63) +check('012', '12', 1, 4, 63) +check('012', '2', 2, None, 63) +check('012', '', 2, -4, 0) +check('012', '', 2, -3, 0) +check('012', '', 2, -2, 0) +check('012', '', 2, -1, 63) +check('012', '', 2, 0, 0) +check('012', '', 2, 1, 0) +check('012', '', 2, 2, 63) +check('012', '2', 2, 3, 63) +check('012', '2', 2, 4, 63) +check('012', '', 3, None, 63) +check('012', '', 3, -4, 0) +check('012', '', 3, -3, 0) +check('012', '', 3, -2, 0) +check('012', '', 3, -1, 0) +check('012', '', 3, 0, 0) +check('012', '', 3, 1, 0) +check('012', '', 3, 2, 0) +check('012', '', 3, 3, 63) +check('012', '', 3, 4, 63) +check('012', '', 4, None, 0) +check('012', '', 4, -4, 0) +check('012', '', 4, -3, 0) +check('012', '', 4, -2, 0) +check('012', '', 4, -1, 0) +check('012', '', 4, 0, 0) +check('012', '', 4, 1, 0) +check('012', '', 4, 2, 0) +check('012', '', 4, 3, 0) +check('012', '', 4, 4, 0) +check('012', '012', None, None, 63) +check('012', '', None, -4, 63) +check('012', '', None, -3, 63) +check('012', '0', None, -2, 63) +check('012', '01', None, -1, 63) +check('012', '', None, 0, 63) +check('012', '0', None, 1, 63) +check('012', '01', None, 2, 63) +check('012', '012', None, 3, 63) +check('012', '012', None, 4, 63) +check('012', '012', -4, None, 63) +check('012', '', -4, -4, 63) +check('012', '', -4, -3, 63) +check('012', '0', -4, -2, 63) +check('012', '01', -4, -1, 63) +check('012', '', -4, 0, 63) +check('012', '0', -4, 1, 63) +check('012', '01', -4, 2, 63) +check('012', '012', -4, 3, 63) +check('012', '012', -4, 4, 63) +check('012', '012', -3, None, 63) +check('012', '', -3, -4, 63) +check('012', '', -3, -3, 63) +check('012', '0', -3, -2, 63) +check('012', '01', -3, -1, 63) +check('012', '', -3, 0, 63) +check('012', '0', -3, 1, 63) +check('012', '01', -3, 2, 63) +check('012', '012', -3, 3, 63) +check('012', '012', -3, 4, 63) +check('012', '12', -2, None, 63) +check('012', '', -2, -4, 0) +check('012', '', -2, -3, 0) +check('012', '', -2, -2, 63) +check('012', '1', -2, -1, 63) +check('012', '', -2, 0, 0) +check('012', '', -2, 1, 63) +check('012', '1', -2, 2, 63) +check('012', '12', -2, 3, 63) +check('012', '12', -2, 4, 63) +check('012', '2', -1, None, 63) +check('012', '', -1, -4, 0) +check('012', '', -1, -3, 0) +check('012', '', -1, -2, 0) +check('012', '', -1, -1, 63) +check('012', '', -1, 0, 0) +check('012', '', -1, 1, 0) +check('012', '', -1, 2, 63) +check('012', '2', -1, 3, 63) +check('012', '2', -1, 4, 63) +check('012', '012', 0, None, 63) +check('012', '', 0, -4, 63) +check('012', '', 0, -3, 63) +check('012', '0', 0, -2, 63) +check('012', '01', 0, -1, 63) +check('012', '', 0, 0, 63) +check('012', '0', 0, 1, 63) +check('012', '01', 0, 2, 63) +check('012', '012', 0, 3, 63) +check('012', '012', 0, 4, 63) +check('012', '12', 1, None, 63) +check('012', '', 1, -4, 0) +check('012', '', 1, -3, 0) +check('012', '', 1, -2, 63) +check('012', '1', 1, -1, 63) +check('012', '', 1, 0, 0) +check('012', '', 1, 1, 63) +check('012', '1', 1, 2, 63) +check('012', '12', 1, 3, 63) +check('012', '12', 1, 4, 63) +check('012', '2', 2, None, 63) +check('012', '', 2, -4, 0) +check('012', '', 2, -3, 0) +check('012', '', 2, -2, 0) +check('012', '', 2, -1, 63) +check('012', '', 2, 0, 0) +check('012', '', 2, 1, 0) +check('012', '', 2, 2, 63) +check('012', '2', 2, 3, 63) +check('012', '2', 2, 4, 63) +check('012', '', 3, None, 63) +check('012', '', 3, -4, 0) +check('012', '', 3, -3, 0) +check('012', '', 3, -2, 0) +check('012', '', 3, -1, 0) +check('012', '', 3, 0, 0) +check('012', '', 3, 1, 0) +check('012', '', 3, 2, 0) +check('012', '', 3, 3, 63) +check('012', '', 3, 4, 63) +check('012', '', 4, None, 0) +check('012', '', 4, -4, 0) +check('012', '', 4, -3, 0) +check('012', '', 4, -2, 0) +check('012', '', 4, -1, 0) +check('012', '', 4, 0, 0) +check('012', '', 4, 1, 0) +check('012', '', 4, 2, 0) +check('012', '', 4, 3, 0) +check('012', '', 4, 4, 0) diff --git a/pypy/objspace/std/test/test_bytearrayobject.py b/pypy/objspace/std/test/test_bytearrayobject.py --- a/pypy/objspace/std/test/test_bytearrayobject.py +++ b/pypy/objspace/std/test/test_bytearrayobject.py @@ -228,9 +228,11 @@ assert bytearray(b'ab').startswith(bytearray(b'b'), 1) is True assert bytearray(b'ab').startswith(bytearray(b''), 2) is True assert bytearray(b'ab').startswith(bytearray(b''), 3) is False + assert bytearray(b'0').startswith(bytearray(b''), 1, -1) is False assert bytearray(b'ab').endswith(bytearray(b'b'), 1) is True assert bytearray(b'ab').endswith(bytearray(b''), 2) is True assert bytearray(b'ab').endswith(bytearray(b''), 3) is False + assert bytearray(b'0').endswith(bytearray(b''), 1, -1) is False def test_startswith_self(self): b = bytearray(b'abcd') diff --git a/pypy/objspace/std/test/test_bytesobject.py b/pypy/objspace/std/test/test_bytesobject.py --- a/pypy/objspace/std/test/test_bytesobject.py +++ b/pypy/objspace/std/test/test_bytesobject.py @@ -424,6 +424,14 @@ assert b'ab'.startswith(b'b', 1) is True assert b'abc'.startswith(b'bc', 1, 2) is False assert b'abc'.startswith(b'c', -1, 4) is True + assert b'0'.startswith(b'', 1, -1) is False + assert b'0'.startswith(b'', 1, 0) is False + assert b'0'.startswith(b'', 1) is True + assert b'0'.startswith(b'', 1, None) is True + assert b''.startswith(b'', 1, -1) is False + assert b''.startswith(b'', 1, 0) is False + assert b''.startswith(b'', 1) is False + assert b''.startswith(b'', 1, None) is False def test_startswith_too_large(self): assert b'ab'.startswith(b'b', 1) is True @@ -467,6 +475,7 @@ assert b'abc'.endswith(b'bc', 1) is True assert b'abc'.endswith(b'bc', 2) is False assert b'abc'.endswith(b'b', -3, -1) is True + assert b'0'.endswith(b'', 1, -1) is False def test_endswith_tuple(self): assert not b'hello'.endswith((b'he', b'ha')) diff --git a/pypy/objspace/std/test/test_unicodeobject.py b/pypy/objspace/std/test/test_unicodeobject.py --- a/pypy/objspace/std/test/test_unicodeobject.py +++ b/pypy/objspace/std/test/test_unicodeobject.py @@ -1,5 +1,5 @@ # -*- encoding: utf-8 -*- -import py +import py, os try: from hypothesis import given, strategies, settings, example HAS_HYPOTHESIS = True @@ -605,6 +605,14 @@ assert 'ab'.startswith('b', 1) is True assert 'abc'.startswith('bc', 1, 2) is False assert 'abc'.startswith('c', -1, 4) is True + assert '0'.startswith('', 1, -1) is False + assert '0'.startswith('', 1, 0) is False + assert '0'.startswith('', 1) is True + assert '0'.startswith('', 1, None) is True + assert ''.startswith('', 1, -1) is False + assert ''.startswith('', 1, 0) is False + assert ''.startswith('', 1) is False + assert ''.startswith('', 1, None) is False try: 'hello'.startswith(['o']) except TypeError as e: @@ -662,6 +670,7 @@ assert 'abc'.endswith('bc', 1) is True assert 'abc'.endswith('bc', 2) is False assert 'abc'.endswith('b', -3, -1) is True + assert '0'.endswith('', 1, -1) is False try: 'hello'.endswith(['o']) except TypeError as e: @@ -1363,3 +1372,7 @@ def test_newlist_utf8_non_ascii(self): 'ä'.split("\n")[0] # does not crash + + with open(os.path.join(os.path.dirname(__file__), 'startswith.py')) as f: + exec 'def test_startswith_endswith_external(self): """%s"""\n' % ( + f.read(),) diff --git a/pypy/objspace/std/unicodeobject.py b/pypy/objspace/std/unicodeobject.py --- a/pypy/objspace/std/unicodeobject.py +++ b/pypy/objspace/std/unicodeobject.py @@ -674,9 +674,6 @@ def descr_startswith(self, space, w_prefix, w_start=None, w_end=None): start, end = self._unwrap_and_compute_idx_params(space, w_start, w_end) value = self._utf8 - if (start > 0 and not space.is_none(w_end) and - space.getindex_w(w_end, None) == 0): - return space.w_False if space.isinstance_w(w_prefix, space.w_tuple): return self._startswith_tuple(space, value, w_prefix, start, end) try: @@ -689,7 +686,7 @@ def _startswith(self, space, value, w_prefix, start, end): prefix = self.convert_arg_to_w_unicode(space, w_prefix)._utf8 - if start > len(value): + if start > end: return False if len(prefix) == 0: return True @@ -698,10 +695,6 @@ def descr_endswith(self, space, w_suffix, w_start=None, w_end=None): start, end = self._unwrap_and_compute_idx_params(space, w_start, w_end) value = self._utf8 - # match cpython behaviour - if (start > 0 and not space.is_none(w_end) and - space.getindex_w(w_end, None) == 0): - return space.w_False if space.isinstance_w(w_suffix, space.w_tuple): return self._endswith_tuple(space, value, w_suffix, start, end) try: @@ -714,7 +707,7 @@ def _endswith(self, space, value, w_prefix, start, end): prefix = self.convert_arg_to_w_unicode(space, w_prefix)._utf8 - if start > len(value): + if start > end: return False if len(prefix) == 0: return True _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit