[pypy-commit] pypy py3.6: Generate a file that hopefully covers all corner cases of startswith()
arigo
pypy.commits at gmail.com
Mon Jul 15 07:53:01 EDT 2019
Author: Armin Rigo <arigo at 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
More information about the pypy-commit
mailing list