[libcxx-commits] [libcxx] [libc++][regex] Correctly adjust match prefix for zero-length matches. (PR #94550)

via libcxx-commits libcxx-commits at lists.llvm.org
Wed Jun 5 17:44:01 PDT 2024


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff dbc3e26c25587e5460ae12caed84cb09197c4ed7 9fd7dceb971cf2595dbde8b41a921b00cea71f15 -- libcxx/include/regex libcxx/test/std/re/re.iter/re.regiter/re.regiter.incr/post.pass.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/libcxx/test/std/re/re.iter/re.regiter/re.regiter.incr/post.pass.cpp b/libcxx/test/std/re/re.iter/re.regiter/re.regiter.incr/post.pass.cpp
index 596a71c70a..449d1fd3a2 100644
--- a/libcxx/test/std/re/re.iter/re.regiter/re.regiter.incr/post.pass.cpp
+++ b/libcxx/test/std/re/re.iter/re.regiter/re.regiter.incr/post.pass.cpp
@@ -114,53 +114,53 @@ int main(int, char**)
         assert(i == e);
     }
 
-  {
-    // Check that we correctly adjust the match prefix when dealing with zero-length matches -- this is explicitly
-    // required by the Standard ([re.regiter.incr]: "In all cases in which the call to `regex_search` returns true,
-    // `match.prefix().first` shall be equal to the previous value of `match[0].second`"). For a pattern that matches
-    // empty sequences, there is an implicit zero-length match between every character in a string -- make sure the
-    // prefix of each of these matches (except the first one) is the preceding character.
-
-    auto validate = [](const std::regex& empty_matching_pattern) {
-      const char source[] = "abc";
-
-      std::cregex_iterator i(source, source + 3, empty_matching_pattern);
-      assert(!i->prefix().matched);
-      assert(i->prefix().length() == 0);
-      assert(i->prefix().first == source);
-      assert(i->prefix().second == source);
-
-      ++i;
-      assert(i->prefix().matched);
-      assert(i->prefix().length() == 1);
-      assert(i->prefix().first == source);
-      assert(i->prefix().second == source + 1);
-      assert(i->prefix().str() == "a");
-
-      ++i;
-      assert(i->prefix().matched);
-      assert(i->prefix().length() == 1);
-      assert(i->prefix().first == source + 1);
-      assert(i->prefix().second == source + 2);
-      assert(i->prefix().str() == "b");
-
-      ++i;
-      assert(i->prefix().matched);
-      assert(i->prefix().length() == 1);
-      assert(i->prefix().first == source + 2);
-      assert(i->prefix().second == source + 3);
-      assert(i->prefix().str() == "c");
-
-      ++i;
-      assert(i == std::cregex_iterator());
-    };
-
-    // An empty pattern produces zero-length matches.
-    validate(std::regex(""));
-    // Any character repeated zero or more times can produce zero-length matches.
-    validate(std::regex("X*"));
-    validate(std::regex("X{0,3}"));
-  }
+    {
+      // Check that we correctly adjust the match prefix when dealing with zero-length matches -- this is explicitly
+      // required by the Standard ([re.regiter.incr]: "In all cases in which the call to `regex_search` returns true,
+      // `match.prefix().first` shall be equal to the previous value of `match[0].second`"). For a pattern that matches
+      // empty sequences, there is an implicit zero-length match between every character in a string -- make sure the
+      // prefix of each of these matches (except the first one) is the preceding character.
+
+      auto validate = [](const std::regex& empty_matching_pattern) {
+        const char source[] = "abc";
+
+        std::cregex_iterator i(source, source + 3, empty_matching_pattern);
+        assert(!i->prefix().matched);
+        assert(i->prefix().length() == 0);
+        assert(i->prefix().first == source);
+        assert(i->prefix().second == source);
+
+        ++i;
+        assert(i->prefix().matched);
+        assert(i->prefix().length() == 1);
+        assert(i->prefix().first == source);
+        assert(i->prefix().second == source + 1);
+        assert(i->prefix().str() == "a");
+
+        ++i;
+        assert(i->prefix().matched);
+        assert(i->prefix().length() == 1);
+        assert(i->prefix().first == source + 1);
+        assert(i->prefix().second == source + 2);
+        assert(i->prefix().str() == "b");
+
+        ++i;
+        assert(i->prefix().matched);
+        assert(i->prefix().length() == 1);
+        assert(i->prefix().first == source + 2);
+        assert(i->prefix().second == source + 3);
+        assert(i->prefix().str() == "c");
+
+        ++i;
+        assert(i == std::cregex_iterator());
+      };
+
+      // An empty pattern produces zero-length matches.
+      validate(std::regex(""));
+      // Any character repeated zero or more times can produce zero-length matches.
+      validate(std::regex("X*"));
+      validate(std::regex("X{0,3}"));
+    }
 
   return 0;
 }

``````````

</details>


https://github.com/llvm/llvm-project/pull/94550


More information about the libcxx-commits mailing list