[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