[3.11] gh-110160: Fix flaky `test_find_periodic_pattern` in `string_tests` (… (#110183)

gh-110160: Fix flaky `test_find_periodic_pattern` in `string_tests` (#110170)

(cherry picked from commit 06faa9a39b)

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
Victor Stinner 2023-10-01 22:43:57 +02:00 committed by GitHub
parent 0914b13ba5
commit 86084d001f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 3 deletions

View File

@ -327,11 +327,12 @@ def reference_find(p, s):
for i in range(len(s)):
if s.startswith(p, i):
return i
if p == '' and s == '':
return 0
return -1
rr = random.randrange
choices = random.choices
for _ in range(1000):
def check_pattern(rr):
choices = random.choices
p0 = ''.join(choices('abcde', k=rr(10))) * rr(10, 20)
p = p0[:len(p0) - rr(10)] # pop off some characters
left = ''.join(choices('abcdef', k=rr(2000)))
@ -341,6 +342,13 @@ def reference_find(p, s):
self.checkequal(reference_find(p, text),
text, 'find', p)
rr = random.randrange
for _ in range(1000):
check_pattern(rr)
# Test that empty string always work:
check_pattern(lambda *args: 0)
def test_find_shift_table_overflow(self):
"""When the table of 8-bit shifts overflows."""
N = 2**8 + 100