]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-110160: Fix flaky `test_find_periodic_pattern` in `string_tests` (#110170)
authorNikita Sobolev <mail@sobolevn.me>
Sun, 1 Oct 2023 14:20:01 +0000 (17:20 +0300)
committerGitHub <noreply@github.com>
Sun, 1 Oct 2023 14:20:01 +0000 (16:20 +0200)
Lib/test/string_tests.py

index 8d210b198d248d358f4956967d21fb943c0041a5..cecf309dca91941b8900c9c973025fcee478120c 100644 (file)
@@ -327,11 +327,12 @@ class BaseTest:
             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 @@ class BaseTest:
                 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_many_lengths(self):
         haystack_repeats = [a * 10**e for e in range(6) for a in (1,2,5)]
         haystacks = [(n, self.fixtype("abcab"*n + "da")) for n in haystack_repeats]