1// { dg-options "-std=gnu++11" } 2 3// 4// 2013-09-14 Tim Shen <timshen91@gmail.com> 5// 6// Copyright (C) 2013-2015 Free Software Foundation, Inc. 7// 8// This file is part of the GNU ISO C++ Library. This library is free 9// software; you can redistribute it and/or modify it under the 10// terms of the GNU General Public License as published by the 11// Free Software Foundation; either version 3, or (at your option) 12// any later version. 13// 14// This library is distributed in the hope that it will be useful, 15// but WITHOUT ANY WARRANTY; without even the implied warranty of 16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17// GNU General Public License for more details. 18// 19// You should have received a copy of the GNU General Public License along 20// with this library; see the file COPYING3. If not see 21// <http://www.gnu.org/licenses/>. 22 23// 28.11.3 regex_search 24// Tests ECMAScript assertion. 25 26#include <regex> 27#include <testsuite_hooks.h> 28#include <testsuite_regex.h> 29 30using namespace __gnu_test; 31using namespace std; 32 33void 34test01() 35{ 36 bool test __attribute__((unused)) = true; 37 38 VERIFY(!regex_search_debug("2123456", regex("^1234"))); 39 VERIFY(regex_search_debug("123456", regex("^1234"))); 40 VERIFY(regex_search_debug("123456", regex("(5|^)1234"))); 41 VERIFY(regex_search_debug("5123456", regex("(5|^)1234"))); 42 VERIFY(!regex_search_debug("1234562", regex("3456$"))); 43 VERIFY(regex_search_debug("123456", regex("3456$"))); 44 VERIFY(!regex_search_debug("123456", regex("(?=1234)56"))); 45 VERIFY(regex_search_debug("123456", regex("(?=1234)123456"))); 46 VERIFY(regex_search_debug("123456", regex("(?!1234)56"))); 47 VERIFY(!regex_search_debug("123456", regex("(?!1234)123456"))); 48 49 VERIFY(regex_search_debug("a-", regex("a\\b-"))); 50 VERIFY(!regex_search_debug("ab", regex("a\\bb"))); 51 VERIFY(!regex_search_debug("a-", regex("a\\B-"))); 52 VERIFY(regex_search_debug("ab", regex("a\\Bb"))); 53 54 string s("This is a regular expression"); 55 string sol[] = 56 { 57 "This", 58 "", 59 "is", 60 "", 61 "a", 62 "", 63 "regular", 64 "", 65 "expression", 66 "", 67 }; 68 69 regex re("\\b\\w*\\b"); 70 int i = 0; 71 for (auto it = sregex_iterator(s.begin(), s.end(), re); 72 it != sregex_iterator(); 73 ++it) 74 { 75 string s((*it)[0].first, (*it)[0].second); 76 VERIFY(s == sol[i++]); 77 } 78 VERIFY(i == 10); 79 80 { 81 cmatch m; 82 regex re("(?=(as)df)as(df)"); 83 regex_search("asdf", m, re); 84 VERIFY(m.size() == 3); 85 VERIFY(m[0].matched && string(m[0].first, m[0].second) == "asdf"); 86 VERIFY(m[1].matched && string(m[1].first, m[1].second) == "as"); 87 VERIFY(m[2].matched && string(m[2].first, m[2].second) == "df"); 88 } 89} 90 91int 92main() 93{ 94 test01(); 95 return 0; 96} 97