From: Benjamin Kosnik Date: Fri, 5 Oct 2012 21:18:54 +0000 (+0000) Subject: match: Rename to... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d2edfb151d3fa8dcc5516aaa3cfb99e53d5aaadf;p=gcc.git match: Rename to... 2012-10-05 Benjamin Kosnik * testsuite/28_regex/algorithms/match: Rename to... * testsuite/28_regex/algorithms/regex_match: ...this. * testsuite/28_regex/basic_regex/regex.cc: Rename to... * testsuite/28_regex/basic_regex/ctors/basic/default.cc: ...this. * testsuite/util/testsuite_regex.h: New. * testsuite/28_regex/basic_regex/ctors/basic/raw_string.cc: New. From-SVN: r192146 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index ed0b7077f26..c651247fb35 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2012-10-05 Benjamin Kosnik + + * testsuite/28_regex/algorithms/match: Rename to... + * testsuite/28_regex/algorithms/regex_match: ...this. + * testsuite/28_regex/basic_regex/regex.cc: Rename to... + * testsuite/28_regex/basic_regex/ctors/basic/default.cc: ...this. + * testsuite/util/testsuite_regex.h: New. + * testsuite/28_regex/basic_regex/ctors/basic/raw_string.cc: New. + 2012-10-05 Jakub Jelinek * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_01.cc b/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_01.cc deleted file mode 100644 index 4a7161a7967..00000000000 --- a/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_01.cc +++ /dev/null @@ -1,63 +0,0 @@ -// { dg-options "-std=c++0x" } - -// -// 2010-06-11 Stephen M. Webb -// -// Copyright (C) 2010 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 -// . - -// 28.11.2 regex_match -// Tests BRE against a std::string target. - -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::regex re("\\(a\\).*", std::regex::basic); - std::string target("aaba"); - std::smatch m; - - VERIFY( std::regex_match(target, m, re) ); - - VERIFY( m.size() == re.mark_count()+1 ); - VERIFY( m.empty() == false ); - VERIFY( m.prefix().first == target.begin() ); - VERIFY( m.prefix().second == target.begin() ); - VERIFY( m.prefix().matched == false ); - VERIFY( m.suffix().first == target.end() ); - VERIFY( m.suffix().second == target.end() ); - VERIFY( m.suffix().matched == false ); - VERIFY( m[0].first == target.begin() ); - VERIFY( m[0].second == target.end() ); - VERIFY( m[0].matched == true ); - VERIFY( m[1].first == target.begin() ); - VERIFY( m[1].second == target.begin()+1 ); - VERIFY( m[1].matched == true ); -} - - -int -main() -{ - test01(); - return 0; -} - diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_range_00_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_range_00_03.cc deleted file mode 100644 index 6c0fdd76f2c..00000000000 --- a/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_range_00_03.cc +++ /dev/null @@ -1,60 +0,0 @@ -// { dg-options "-std=c++0x" } - -// -// 2010-06-16 Stephen M. Webb -// -// Copyright (C) 2010 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 -// . - -// 28.11.2 regex_match -// Tests BRE against a std::string target, exercising range {0,3} - -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::regex re("a\\{0,3\\}", std::regex::basic); - std::string target("aa"); - std::smatch m; - - VERIFY( std::regex_match(target, m, re) ); - - VERIFY( m.size() == re.mark_count()+1 ); - VERIFY( m.empty() == false ); - VERIFY( m.prefix().first == target.begin() ); - VERIFY( m.prefix().second == target.begin() ); - VERIFY( m.prefix().matched == false ); - VERIFY( m.suffix().first == target.end() ); - VERIFY( m.suffix().second == target.end() ); - VERIFY( m.suffix().matched == false ); - VERIFY( m[0].first == target.begin() ); - VERIFY( m[0].second == target.end() ); - VERIFY( m[0].matched == true ); -} - - -int -main() -{ - test01(); - return 0; -} - diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_range_01_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_range_01_03.cc deleted file mode 100644 index 3439b544b63..00000000000 --- a/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_range_01_03.cc +++ /dev/null @@ -1,60 +0,0 @@ -// { dg-options "-std=c++0x" } - -// -// 2010-06-16 Stephen M. Webb -// -// Copyright (C) 2010 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 -// . - -// 28.11.2 regex_match -// Tests BRE against a std::string target, exercising range {1,3} - -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::regex re("a\\{1,3\\}", std::regex::basic); - std::string target("aa"); - std::smatch m; - - VERIFY( std::regex_match(target, m, re) ); - - VERIFY( m.size() == re.mark_count()+1 ); - VERIFY( m.empty() == false ); - VERIFY( m.prefix().first == target.begin() ); - VERIFY( m.prefix().second == target.begin() ); - VERIFY( m.prefix().matched == false ); - VERIFY( m.suffix().first == target.end() ); - VERIFY( m.suffix().second == target.end() ); - VERIFY( m.suffix().matched == false ); - VERIFY( m[0].first == target.begin() ); - VERIFY( m[0].second == target.end() ); - VERIFY( m[0].matched == true ); -} - - -int -main() -{ - test01(); - return 0; -} - diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_range_02_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_range_02_03.cc deleted file mode 100644 index dfd00a0f3d7..00000000000 --- a/libstdc++-v3/testsuite/28_regex/algorithms/match/basic/string_range_02_03.cc +++ /dev/null @@ -1,61 +0,0 @@ -// { dg-options "-std=c++0x" } -// { dg-do run { xfail *-*-* } } - -// -// 2010-06-16 Stephen M. Webb -// -// Copyright (C) 2010 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 -// . - -// 28.11.2 regex_match -// Tests BRE against a std::string target, exercising range {2,3} - -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::regex re("a\\{2,3\\}", std::regex::basic); - std::string target("aa"); - std::smatch m; - - VERIFY( std::regex_match(target, m, re) ); - - VERIFY( m.size() == re.mark_count()+1 ); - VERIFY( m.empty() == false ); - VERIFY( m.prefix().first == target.begin() ); - VERIFY( m.prefix().second == target.begin() ); - VERIFY( m.prefix().matched == false ); - VERIFY( m.suffix().first == target.end() ); - VERIFY( m.suffix().second == target.end() ); - VERIFY( m.suffix().matched == false ); - VERIFY( m[0].first == target.begin() ); - VERIFY( m[0].second == target.end() ); - VERIFY( m[0].matched == true ); -} - - -int -main() -{ - test01(); - return 0; -} - diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/cstring_plus.cc b/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/cstring_plus.cc deleted file mode 100644 index ad0f57e221d..00000000000 --- a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/cstring_plus.cc +++ /dev/null @@ -1,65 +0,0 @@ -// { dg-options "-std=c++0x" } -// { dg-do run { xfail *-*-* } } - -// -// 2010-06-21 Stephen M. Webb -// -// Copyright (C) 2010 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 -// . - -// 28.11.2 regex_match -// Tests ERE against a C-string target, plus-sign match. - -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::regex re("(a+)", std::regex::extended); - const char target[] = "aa"; - std::cmatch m; - - VERIFY( std::regex_match(target, m, re) ); - - VERIFY( re.mark_count() == 1 ); - VERIFY( m.size() == re.mark_count()+1 ); - VERIFY( m.empty() == false ); - VERIFY( m.prefix().first == target ); - VERIFY( m.prefix().second == target ); - VERIFY( m.prefix().matched == false ); - VERIFY( m.suffix().first == target+sizeof(target) ); - VERIFY( m.suffix().second == target+sizeof(target) ); - VERIFY( m.suffix().matched == false ); - VERIFY( m[0].first == target ); - VERIFY( m[0].second == target+sizeof(target) ); - VERIFY( m[0].matched == true ); - VERIFY( m[1].first == target ); - VERIFY( m[1].second == target+sizeof(target) ); - VERIFY( m[1].matched == true ); -} - - -int -main() -{ - test01(); - return 0; -} - diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/cstring_questionmark.cc b/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/cstring_questionmark.cc deleted file mode 100644 index 21abea456a9..00000000000 --- a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/cstring_questionmark.cc +++ /dev/null @@ -1,65 +0,0 @@ -// { dg-options "-std=c++0x" } -// { dg-do run { xfail *-*-* } } - -// -// 2010-06-21 Stephen M. Webb -// -// Copyright (C) 2010 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 -// . - -// 28.11.2 regex_match -// Tests ERE against a C-string target, question-mark match. - -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::regex re("(aa?)", std::regex::extended); - char target[] = "a"; - std::cmatch m; - - VERIFY( std::regex_match(target, m, re) ); - - VERIFY( re.mark_count() == 1 ); - VERIFY( m.size() == re.mark_count()+1 ); - VERIFY( m.empty() == false ); - VERIFY( m.prefix().first == target ); - VERIFY( m.prefix().second == target ); - VERIFY( m.prefix().matched == false ); - VERIFY( m.suffix().first == target+sizeof(target) ); - VERIFY( m.suffix().second == target+sizeof(target) ); - VERIFY( m.suffix().matched == false ); - VERIFY( m[0].first == target ); - VERIFY( m[0].second == target+sizeof(target) ); - VERIFY( m[0].matched == true ); - VERIFY( m[1].first == target ); - VERIFY( m[1].second == target+sizeof(target) ); - VERIFY( m[1].matched == true ); -} - - -int -main() -{ - test01(); - return 0; -} - diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_any.cc b/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_any.cc deleted file mode 100644 index 8d3716b1edf..00000000000 --- a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_any.cc +++ /dev/null @@ -1,60 +0,0 @@ -// { dg-options "-std=c++0x" } - -// -// 2010-06-11 Stephen M. Webb -// -// Copyright (C) 2010 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 -// . - -// 28.11.2 regex_match -// Tests ERE against a std::string target. - -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::regex re(".*", std::regex::extended); - std::string target("aaba"); - std::smatch m; - - VERIFY( std::regex_match(target, m, re) ); - - VERIFY( m.size() == re.mark_count()+1 ); - VERIFY( m.empty() == false ); - VERIFY( m.prefix().first == target.begin() ); - VERIFY( m.prefix().second == target.begin() ); - VERIFY( m.prefix().matched == false ); - VERIFY( m.suffix().first == target.end() ); - VERIFY( m.suffix().second == target.end() ); - VERIFY( m.suffix().matched == false ); - VERIFY( m[0].first == target.begin() ); - VERIFY( m[0].second == target.end() ); - VERIFY( m[0].matched == true ); -} - - -int -main() -{ - test01(); - return 0; -} - diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_range_00_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_range_00_03.cc deleted file mode 100644 index a0a2e1fa9d8..00000000000 --- a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_range_00_03.cc +++ /dev/null @@ -1,60 +0,0 @@ -// { dg-options "-std=c++0x" } - -// -// 2010-06-16 Stephen M. Webb -// -// Copyright (C) 2010 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 -// . - -// 28.11.2 regex_match -// Tests ERE against a std::string target, exercising range {0,3} - -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::regex re("a{0,3}", std::regex::extended); - std::string target("aa"); - std::smatch m; - - VERIFY( std::regex_match(target, m, re) ); - - VERIFY( m.size() == re.mark_count()+1 ); - VERIFY( m.empty() == false ); - VERIFY( m.prefix().first == target.begin() ); - VERIFY( m.prefix().second == target.begin() ); - VERIFY( m.prefix().matched == false ); - VERIFY( m.suffix().first == target.end() ); - VERIFY( m.suffix().second == target.end() ); - VERIFY( m.suffix().matched == false ); - VERIFY( m[0].first == target.begin() ); - VERIFY( m[0].second == target.end() ); - VERIFY( m[0].matched == true ); -} - - -int -main() -{ - test01(); - return 0; -} - diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_range_01_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_range_01_03.cc deleted file mode 100644 index b50e07645ab..00000000000 --- a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_range_01_03.cc +++ /dev/null @@ -1,60 +0,0 @@ -// { dg-options "-std=c++0x" } - -// -// 2010-06-16 Stephen M. Webb -// -// Copyright (C) 2010 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 -// . - -// 28.11.2 regex_match -// Tests ERE against a std::string target, exercising range {1,3} - -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::regex re("a{1,3}", std::regex::extended); - std::string target("aa"); - std::smatch m; - - VERIFY( std::regex_match(target, m, re) ); - - VERIFY( m.size() == re.mark_count()+1 ); - VERIFY( m.empty() == false ); - VERIFY( m.prefix().first == target.begin() ); - VERIFY( m.prefix().second == target.begin() ); - VERIFY( m.prefix().matched == false ); - VERIFY( m.suffix().first == target.end() ); - VERIFY( m.suffix().second == target.end() ); - VERIFY( m.suffix().matched == false ); - VERIFY( m[0].first == target.begin() ); - VERIFY( m[0].second == target.end() ); - VERIFY( m[0].matched == true ); -} - - -int -main() -{ - test01(); - return 0; -} - diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_range_02_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_range_02_03.cc deleted file mode 100644 index ca322a8d4cd..00000000000 --- a/libstdc++-v3/testsuite/28_regex/algorithms/match/extended/string_range_02_03.cc +++ /dev/null @@ -1,61 +0,0 @@ -// { dg-options "-std=c++0x" } -// { dg-do run { xfail *-*-* } } - -// -// 2010-06-16 Stephen M. Webb -// -// Copyright (C) 2010 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 -// . - -// 28.11.2 regex_match -// Tests ERE against a std::string target, exercising range {2,3} - -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::regex re("a{2,3}", std::regex::extended); - std::string target("aa"); - std::smatch m; - - VERIFY( std::regex_match(target, m, re) ); - - VERIFY( m.size() == re.mark_count()+1 ); - VERIFY( m.empty() == false ); - VERIFY( m.prefix().first == target.begin() ); - VERIFY( m.prefix().second == target.begin() ); - VERIFY( m.prefix().matched == false ); - VERIFY( m.suffix().first == target.end() ); - VERIFY( m.suffix().second == target.end() ); - VERIFY( m.suffix().matched == false ); - VERIFY( m[0].first == target.begin() ); - VERIFY( m[0].second == target.end() ); - VERIFY( m[0].matched == true ); -} - - -int -main() -{ - test01(); - return 0; -} - diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_01.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_01.cc new file mode 100644 index 00000000000..4a7161a7967 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_01.cc @@ -0,0 +1,63 @@ +// { dg-options "-std=c++0x" } + +// +// 2010-06-11 Stephen M. Webb +// +// Copyright (C) 2010 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 +// . + +// 28.11.2 regex_match +// Tests BRE against a std::string target. + +#include +#include + +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::regex re("\\(a\\).*", std::regex::basic); + std::string target("aaba"); + std::smatch m; + + VERIFY( std::regex_match(target, m, re) ); + + VERIFY( m.size() == re.mark_count()+1 ); + VERIFY( m.empty() == false ); + VERIFY( m.prefix().first == target.begin() ); + VERIFY( m.prefix().second == target.begin() ); + VERIFY( m.prefix().matched == false ); + VERIFY( m.suffix().first == target.end() ); + VERIFY( m.suffix().second == target.end() ); + VERIFY( m.suffix().matched == false ); + VERIFY( m[0].first == target.begin() ); + VERIFY( m[0].second == target.end() ); + VERIFY( m[0].matched == true ); + VERIFY( m[1].first == target.begin() ); + VERIFY( m[1].second == target.begin()+1 ); + VERIFY( m[1].matched == true ); +} + + +int +main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_00_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_00_03.cc new file mode 100644 index 00000000000..6c0fdd76f2c --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_00_03.cc @@ -0,0 +1,60 @@ +// { dg-options "-std=c++0x" } + +// +// 2010-06-16 Stephen M. Webb +// +// Copyright (C) 2010 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 +// . + +// 28.11.2 regex_match +// Tests BRE against a std::string target, exercising range {0,3} + +#include +#include + +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::regex re("a\\{0,3\\}", std::regex::basic); + std::string target("aa"); + std::smatch m; + + VERIFY( std::regex_match(target, m, re) ); + + VERIFY( m.size() == re.mark_count()+1 ); + VERIFY( m.empty() == false ); + VERIFY( m.prefix().first == target.begin() ); + VERIFY( m.prefix().second == target.begin() ); + VERIFY( m.prefix().matched == false ); + VERIFY( m.suffix().first == target.end() ); + VERIFY( m.suffix().second == target.end() ); + VERIFY( m.suffix().matched == false ); + VERIFY( m[0].first == target.begin() ); + VERIFY( m[0].second == target.end() ); + VERIFY( m[0].matched == true ); +} + + +int +main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_01_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_01_03.cc new file mode 100644 index 00000000000..3439b544b63 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_01_03.cc @@ -0,0 +1,60 @@ +// { dg-options "-std=c++0x" } + +// +// 2010-06-16 Stephen M. Webb +// +// Copyright (C) 2010 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 +// . + +// 28.11.2 regex_match +// Tests BRE against a std::string target, exercising range {1,3} + +#include +#include + +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::regex re("a\\{1,3\\}", std::regex::basic); + std::string target("aa"); + std::smatch m; + + VERIFY( std::regex_match(target, m, re) ); + + VERIFY( m.size() == re.mark_count()+1 ); + VERIFY( m.empty() == false ); + VERIFY( m.prefix().first == target.begin() ); + VERIFY( m.prefix().second == target.begin() ); + VERIFY( m.prefix().matched == false ); + VERIFY( m.suffix().first == target.end() ); + VERIFY( m.suffix().second == target.end() ); + VERIFY( m.suffix().matched == false ); + VERIFY( m[0].first == target.begin() ); + VERIFY( m[0].second == target.end() ); + VERIFY( m[0].matched == true ); +} + + +int +main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_02_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_02_03.cc new file mode 100644 index 00000000000..dfd00a0f3d7 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/basic/string_range_02_03.cc @@ -0,0 +1,61 @@ +// { dg-options "-std=c++0x" } +// { dg-do run { xfail *-*-* } } + +// +// 2010-06-16 Stephen M. Webb +// +// Copyright (C) 2010 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 +// . + +// 28.11.2 regex_match +// Tests BRE against a std::string target, exercising range {2,3} + +#include +#include + +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::regex re("a\\{2,3\\}", std::regex::basic); + std::string target("aa"); + std::smatch m; + + VERIFY( std::regex_match(target, m, re) ); + + VERIFY( m.size() == re.mark_count()+1 ); + VERIFY( m.empty() == false ); + VERIFY( m.prefix().first == target.begin() ); + VERIFY( m.prefix().second == target.begin() ); + VERIFY( m.prefix().matched == false ); + VERIFY( m.suffix().first == target.end() ); + VERIFY( m.suffix().second == target.end() ); + VERIFY( m.suffix().matched == false ); + VERIFY( m[0].first == target.begin() ); + VERIFY( m[0].second == target.end() ); + VERIFY( m[0].matched == true ); +} + + +int +main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_plus.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_plus.cc new file mode 100644 index 00000000000..ad0f57e221d --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_plus.cc @@ -0,0 +1,65 @@ +// { dg-options "-std=c++0x" } +// { dg-do run { xfail *-*-* } } + +// +// 2010-06-21 Stephen M. Webb +// +// Copyright (C) 2010 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 +// . + +// 28.11.2 regex_match +// Tests ERE against a C-string target, plus-sign match. + +#include +#include + +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::regex re("(a+)", std::regex::extended); + const char target[] = "aa"; + std::cmatch m; + + VERIFY( std::regex_match(target, m, re) ); + + VERIFY( re.mark_count() == 1 ); + VERIFY( m.size() == re.mark_count()+1 ); + VERIFY( m.empty() == false ); + VERIFY( m.prefix().first == target ); + VERIFY( m.prefix().second == target ); + VERIFY( m.prefix().matched == false ); + VERIFY( m.suffix().first == target+sizeof(target) ); + VERIFY( m.suffix().second == target+sizeof(target) ); + VERIFY( m.suffix().matched == false ); + VERIFY( m[0].first == target ); + VERIFY( m[0].second == target+sizeof(target) ); + VERIFY( m[0].matched == true ); + VERIFY( m[1].first == target ); + VERIFY( m[1].second == target+sizeof(target) ); + VERIFY( m[1].matched == true ); +} + + +int +main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_questionmark.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_questionmark.cc new file mode 100644 index 00000000000..21abea456a9 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/cstring_questionmark.cc @@ -0,0 +1,65 @@ +// { dg-options "-std=c++0x" } +// { dg-do run { xfail *-*-* } } + +// +// 2010-06-21 Stephen M. Webb +// +// Copyright (C) 2010 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 +// . + +// 28.11.2 regex_match +// Tests ERE against a C-string target, question-mark match. + +#include +#include + +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::regex re("(aa?)", std::regex::extended); + char target[] = "a"; + std::cmatch m; + + VERIFY( std::regex_match(target, m, re) ); + + VERIFY( re.mark_count() == 1 ); + VERIFY( m.size() == re.mark_count()+1 ); + VERIFY( m.empty() == false ); + VERIFY( m.prefix().first == target ); + VERIFY( m.prefix().second == target ); + VERIFY( m.prefix().matched == false ); + VERIFY( m.suffix().first == target+sizeof(target) ); + VERIFY( m.suffix().second == target+sizeof(target) ); + VERIFY( m.suffix().matched == false ); + VERIFY( m[0].first == target ); + VERIFY( m[0].second == target+sizeof(target) ); + VERIFY( m[0].matched == true ); + VERIFY( m[1].first == target ); + VERIFY( m[1].second == target+sizeof(target) ); + VERIFY( m[1].matched == true ); +} + + +int +main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_any.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_any.cc new file mode 100644 index 00000000000..8d3716b1edf --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_any.cc @@ -0,0 +1,60 @@ +// { dg-options "-std=c++0x" } + +// +// 2010-06-11 Stephen M. Webb +// +// Copyright (C) 2010 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 +// . + +// 28.11.2 regex_match +// Tests ERE against a std::string target. + +#include +#include + +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::regex re(".*", std::regex::extended); + std::string target("aaba"); + std::smatch m; + + VERIFY( std::regex_match(target, m, re) ); + + VERIFY( m.size() == re.mark_count()+1 ); + VERIFY( m.empty() == false ); + VERIFY( m.prefix().first == target.begin() ); + VERIFY( m.prefix().second == target.begin() ); + VERIFY( m.prefix().matched == false ); + VERIFY( m.suffix().first == target.end() ); + VERIFY( m.suffix().second == target.end() ); + VERIFY( m.suffix().matched == false ); + VERIFY( m[0].first == target.begin() ); + VERIFY( m[0].second == target.end() ); + VERIFY( m[0].matched == true ); +} + + +int +main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_00_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_00_03.cc new file mode 100644 index 00000000000..a0a2e1fa9d8 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_00_03.cc @@ -0,0 +1,60 @@ +// { dg-options "-std=c++0x" } + +// +// 2010-06-16 Stephen M. Webb +// +// Copyright (C) 2010 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 +// . + +// 28.11.2 regex_match +// Tests ERE against a std::string target, exercising range {0,3} + +#include +#include + +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::regex re("a{0,3}", std::regex::extended); + std::string target("aa"); + std::smatch m; + + VERIFY( std::regex_match(target, m, re) ); + + VERIFY( m.size() == re.mark_count()+1 ); + VERIFY( m.empty() == false ); + VERIFY( m.prefix().first == target.begin() ); + VERIFY( m.prefix().second == target.begin() ); + VERIFY( m.prefix().matched == false ); + VERIFY( m.suffix().first == target.end() ); + VERIFY( m.suffix().second == target.end() ); + VERIFY( m.suffix().matched == false ); + VERIFY( m[0].first == target.begin() ); + VERIFY( m[0].second == target.end() ); + VERIFY( m[0].matched == true ); +} + + +int +main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_01_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_01_03.cc new file mode 100644 index 00000000000..b50e07645ab --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_01_03.cc @@ -0,0 +1,60 @@ +// { dg-options "-std=c++0x" } + +// +// 2010-06-16 Stephen M. Webb +// +// Copyright (C) 2010 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 +// . + +// 28.11.2 regex_match +// Tests ERE against a std::string target, exercising range {1,3} + +#include +#include + +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::regex re("a{1,3}", std::regex::extended); + std::string target("aa"); + std::smatch m; + + VERIFY( std::regex_match(target, m, re) ); + + VERIFY( m.size() == re.mark_count()+1 ); + VERIFY( m.empty() == false ); + VERIFY( m.prefix().first == target.begin() ); + VERIFY( m.prefix().second == target.begin() ); + VERIFY( m.prefix().matched == false ); + VERIFY( m.suffix().first == target.end() ); + VERIFY( m.suffix().second == target.end() ); + VERIFY( m.suffix().matched == false ); + VERIFY( m[0].first == target.begin() ); + VERIFY( m[0].second == target.end() ); + VERIFY( m[0].matched == true ); +} + + +int +main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_02_03.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_02_03.cc new file mode 100644 index 00000000000..ca322a8d4cd --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/extended/string_range_02_03.cc @@ -0,0 +1,61 @@ +// { dg-options "-std=c++0x" } +// { dg-do run { xfail *-*-* } } + +// +// 2010-06-16 Stephen M. Webb +// +// Copyright (C) 2010 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 +// . + +// 28.11.2 regex_match +// Tests ERE against a std::string target, exercising range {2,3} + +#include +#include + +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::regex re("a{2,3}", std::regex::extended); + std::string target("aa"); + std::smatch m; + + VERIFY( std::regex_match(target, m, re) ); + + VERIFY( m.size() == re.mark_count()+1 ); + VERIFY( m.empty() == false ); + VERIFY( m.prefix().first == target.begin() ); + VERIFY( m.prefix().second == target.begin() ); + VERIFY( m.prefix().matched == false ); + VERIFY( m.suffix().first == target.end() ); + VERIFY( m.suffix().second == target.end() ); + VERIFY( m.suffix().matched == false ); + VERIFY( m[0].first == target.begin() ); + VERIFY( m[0].second == target.end() ); + VERIFY( m[0].matched == true ); +} + + +int +main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/default.cc b/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/default.cc new file mode 100644 index 00000000000..8a803ede81f --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/default.cc @@ -0,0 +1,37 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +// 2007-03-12 Stephen M. Webb +// +// Copyright (C) 2007, 2009, 2010 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 +// . + +// 7.4 typedef std::regex + +#include + +void +test01() +{ + std::regex re; +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/raw_string.cc b/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/raw_string.cc new file mode 100644 index 00000000000..0ab42ebaca6 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/basic_regex/ctors/basic/raw_string.cc @@ -0,0 +1,52 @@ +// { dg-options "-std=c++0x" } +// { dg-do run { xfail *-*-* } } + +// 2012-08-20 Benjamin Kosnik +// +// Copyright (C) 2012 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 +// . + +// basic_regex constructors + raw string literals + +#include +#include + +void +test01() +{ + using namespace __gnu_test; + + // raw string literals + + //string_type sre0(R"(\d{3}-\d{3}-\d{4})"); // expected fail + + string_type sre1(R"( this\n and new : forms\n )"); + + string_type sre2(R"([:num:]{3}-[:num:]{3}-[:num:]{4})"); + + // 1 + regex_type re(R"( this\n and new : forms\n )", std::regex::basic); + + // 2 + regex_sanity_check(sre1); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/28_regex/basic_regex/regex.cc b/libstdc++-v3/testsuite/28_regex/basic_regex/regex.cc deleted file mode 100644 index 8a803ede81f..00000000000 --- a/libstdc++-v3/testsuite/28_regex/basic_regex/regex.cc +++ /dev/null @@ -1,37 +0,0 @@ -// { dg-do compile } -// { dg-options "-std=c++0x" } - -// 2007-03-12 Stephen M. Webb -// -// Copyright (C) 2007, 2009, 2010 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 -// . - -// 7.4 typedef std::regex - -#include - -void -test01() -{ - std::regex re; -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/util/testsuite_regex.h b/libstdc++-v3/testsuite/util/testsuite_regex.h new file mode 100644 index 00000000000..dbf4b34553d --- /dev/null +++ b/libstdc++-v3/testsuite/util/testsuite_regex.h @@ -0,0 +1,130 @@ +// -*- C++ -*- +// regex utils for the C++ library testsuite. +// +// Copyright (C) 2012 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 +// . +// + +#include +#include +#include + +#ifndef _TESTSUITE_REGEX_H +#define _TESTSUITE_REGEX_H 1 + +namespace __gnu_test +{ + // Test on a compilation of simple expressions, throw regex_error on error. + typedef std::regex regex_type; + typedef regex_type::flag_type flag_type; + typedef std::regex_constants::error_type error_type; + typedef std::size_t size_type; + typedef std::string string_type; + + // Utilities + struct regex_expected_fail { }; + + const error_type regex_error_internal(static_cast(-1)); + + // Stringify error codes for text logging. + const char* regex_error_codes[] = + { + "error_collate", + "error_ctype", + "error_escape", + "error_backref", + "error_brack", + "error_paren", + "error_brace", + "error_badbrace", + "error_range", + "error_space", + "error_badrepeat", + "error_complexity", + "error_stack" + }; + + void + show_regex_error_codes() + { + using namespace std; + using namespace std::regex_constants; + const char tab('\t'); + cout << "error_collate = " << tab << error_collate << endl; + cout << "error_ctype = " << tab << error_ctype << endl; + cout << "error_escape = " << tab << error_escape << endl; + cout << "error_backref = " << tab << error_backref << endl; + cout << "error_brack = " << tab << error_brack << endl; + cout << "error_paren = " << tab << error_paren << endl; + cout << "error_brace = " << tab << error_brace << endl; + cout << "error_badbrace = " << tab << error_badbrace << endl; + cout << "error_range = " << tab << error_range << endl; + cout << "error_space = " << tab << error_space << endl; + cout << "error_badrepeat = " << tab << error_badrepeat << endl; + cout << "error_complexity =" << tab << error_complexity << endl; + cout << "error_stack = " << tab << error_stack << endl; + } + + // Arguments + // string __res: the regular expression string + // flag_type __f: flag + // __error: expected error, if any + void + regex_sanity_check(const string_type& __res, + flag_type __f = regex_type::basic, + error_type __error = regex_error_internal) + { + using namespace std; + + try + { + regex_type reo(__res, __f); + auto n = reo.mark_count(); + cout << "regex_type::mark_count " << n << endl; + } + catch (const regex_error& e) + { + cout << "regex_sanity_check: " << __res << endl; + cout << "regex_error::what " << e.what() << endl; + + show_regex_error_codes(); + cout << "regex_error::code " << regex_error_codes[e.code()] << endl; + + if (__error != regex_error_internal) + { + // Then expected error_type is __error. Check. + if (__error != e.code()) + { + throw regex_expected_fail(); + } + } + throw; + } + catch (const logic_error& e) + { + cout << "logic_error::what " << e.what() << endl; + throw; + } + catch (const std::exception& e) + { + cout << "exception: " << endl; + throw; + } + } + +} // namespace __gnu_test +#endif