[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