summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/28_regex/algorithms
diff options
context:
space:
mode:
authortimshen <timshen@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-01 15:26:50 +0000
committertimshen <timshen@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-01 15:26:50 +0000
commit24e28cb5278924fc604ac2c61162db3fa3b8f201 (patch)
tree361212cb84460e9074fad63cb9dd9eee059ddcb1 /libstdc++-v3/testsuite/28_regex/algorithms
parentd68f29d7941997b69c92e3a8b705df9ca65bbb19 (diff)
downloadgcc-24e28cb5278924fc604ac2c61162db3fa3b8f201.tar.gz
2013-10-01 Tim Shen <timshen91@gmail.com>
PR libstdc++/58576 * include/bits/regex_automaton.tcc (_NFA<>::_M_eliminate_dummy) (_StateSeq<>::_M_clone): Add _S_opcode_subexpr_lookahead branch. * testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203067 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/testsuite/28_regex/algorithms')
-rw-r--r--libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc98
1 files changed, 98 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc
new file mode 100644
index 00000000000..1a1365ceea2
--- /dev/null
+++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc
@@ -0,0 +1,98 @@
+// { dg-options "-std=gnu++11" }
+
+//
+// 2013-10-01 Tim Shen <timshen91@gmail.com>
+//
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 28.11.2 regex_match
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// libstdc++/58576
+void
+test01()
+{
+ using namespace std;
+
+ bool test __attribute__((unused)) = true;
+
+ string domain_name = "valid.hostname.org";
+ /**
+ * based on http://stackoverflow.com/questions/1418423/the-hostname-regex
+ */
+ regex fqdn_regex
+ (
+ "^"
+ "(?=.{1,255}$)"
+ "[[:alnum:]]"
+ "("
+ "(([[:alnum:]]|-)"
+ "{0,61})"
+ "[[:alnum:]]"
+ ")?"
+ "("
+ "\\."
+ "[[:alnum:]]"
+ "("
+ "(([[:alnum:]]|-)"
+ "{0,61})"
+ "[[:alnum:]]"
+ ")?"
+ ")*"
+ "\\.?"
+ "$"
+ );
+
+ smatch m;
+ const char* sol[] =
+ {
+ "valid.hostname.org",
+ "alid",
+ "ali",
+ "i",
+ ".org",
+ "rg",
+ "r",
+ "r",
+ };
+ try
+ {
+ VERIFY(regex_match( domain_name, m, fqdn_regex ));
+ VERIFY(m.size() == sizeof(sol) / sizeof(*sol));
+ for (int i = 0; i < (int)m.size(); i++) {
+ string s(m[i].first, m[i].second);
+ VERIFY(s == sol[i]);
+ }
+ }
+ catch ( const regex_error& ex )
+ {
+ if ( ex.code() == regex_constants::error_brack )
+ {
+ throw;
+ }
+ }
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}