summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/re/re.alg/re.alg.match/inverted_character_classes.pass.cpp
diff options
context:
space:
mode:
authorLouis Dionne <ldionne@apple.com>2018-08-24 14:10:28 +0000
committerLouis Dionne <ldionne@apple.com>2018-08-24 14:10:28 +0000
commit954d4a2235865af388f3d8ce4dc7793ba4703139 (patch)
tree62359fe7503edc71bcb55adf3b726b250e420c1d /libcxx/test/std/re/re.alg/re.alg.match/inverted_character_classes.pass.cpp
parent616ef1863faef8dedf2e6bfbaee7569d84f11e35 (diff)
downloadbcm5719-llvm-954d4a2235865af388f3d8ce4dc7793ba4703139.tar.gz
bcm5719-llvm-954d4a2235865af388f3d8ce4dc7793ba4703139.zip
[libc++] Fix handling of negated character classes in regex
Summary: This commit fixes a regression introduced in r316095, where we don't match inverted character classes when there's no negated characrers in the []'s. rdar://problem/43060054 Reviewers: mclow.lists, timshen, EricWF Subscribers: christof, dexonsmith, cfe-commits Differential Revision: https://reviews.llvm.org/D50534 llvm-svn: 340609
Diffstat (limited to 'libcxx/test/std/re/re.alg/re.alg.match/inverted_character_classes.pass.cpp')
-rw-r--r--libcxx/test/std/re/re.alg/re.alg.match/inverted_character_classes.pass.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/libcxx/test/std/re/re.alg/re.alg.match/inverted_character_classes.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.match/inverted_character_classes.pass.cpp
new file mode 100644
index 00000000000..5a19edc1a4d
--- /dev/null
+++ b/libcxx/test/std/re/re.alg/re.alg.match/inverted_character_classes.pass.cpp
@@ -0,0 +1,44 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <regex>
+// UNSUPPORTED: c++98, c++03
+
+// Make sure that we correctly match inverted character classes.
+
+#include <cassert>
+#include <regex>
+
+
+int main() {
+ assert(std::regex_match("X", std::regex("[X]")));
+ assert(std::regex_match("X", std::regex("[XY]")));
+ assert(!std::regex_match("X", std::regex("[^X]")));
+ assert(!std::regex_match("X", std::regex("[^XY]")));
+
+ assert(std::regex_match("X", std::regex("[\\S]")));
+ assert(!std::regex_match("X", std::regex("[^\\S]")));
+
+ assert(!std::regex_match("X", std::regex("[\\s]")));
+ assert(std::regex_match("X", std::regex("[^\\s]")));
+
+ assert(std::regex_match("X", std::regex("[\\s\\S]")));
+ assert(std::regex_match("X", std::regex("[^Y\\s]")));
+ assert(!std::regex_match("X", std::regex("[^X\\s]")));
+
+ assert(std::regex_match("X", std::regex("[\\w]")));
+ assert(std::regex_match("_", std::regex("[\\w]")));
+ assert(!std::regex_match("X", std::regex("[^\\w]")));
+ assert(!std::regex_match("_", std::regex("[^\\w]")));
+
+ assert(!std::regex_match("X", std::regex("[\\W]")));
+ assert(!std::regex_match("_", std::regex("[\\W]")));
+ assert(std::regex_match("X", std::regex("[^\\W]")));
+ assert(std::regex_match("_", std::regex("[^\\W]")));
+}
OpenPOWER on IntegriCloud