//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03 // // multiline: // Specifies that ^ shall match the beginning of a line and $ shall match // the end of a line, if the ECMAScript engine is selected. #include #include #include "test_macros.h" static void search(const char* pat, std::regex_constants::syntax_option_type f, const char* target, bool expected) { std::regex re(pat, f); std::cmatch m; assert(std::regex_search(target, m, re) == expected); if(expected) { assert(m.size() == 1); assert(m.length(0) == 3); assert(m.str(0) == "foo"); } else { assert(m.size() == 0); } } int main(int, char**) { using std::regex_constants::ECMAScript; using std::regex_constants::basic; using std::regex_constants::extended; using std::regex_constants::awk; using std::regex_constants::grep; using std::regex_constants::egrep; using std::regex_constants::multiline; { const char* pat = "^foo"; const char* target = "foo"; search(pat, ECMAScript, target, true); search(pat, basic, target, true); search(pat, extended, target, true); search(pat, awk, target, true); search(pat, grep, target, true); search(pat, egrep, target, true); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, true); search(pat, extended | multiline, target, true); search(pat, awk | multiline, target, true); search(pat, grep | multiline, target, true); search(pat, egrep | multiline, target, true); } { const char* pat = "^foo"; const char* target = "\nfoo"; search(pat, ECMAScript, target, false); search(pat, basic, target, false); search(pat, extended, target, false); search(pat, awk, target, false); search(pat, grep, target, false); search(pat, egrep, target, false); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, false); search(pat, extended | multiline, target, false); search(pat, awk | multiline, target, false); search(pat, grep | multiline, target, false); search(pat, egrep | multiline, target, false); } { const char* pat = "^foo"; const char* target = "bar\nfoo"; search(pat, ECMAScript, target, false); search(pat, basic, target, false); search(pat, extended, target, false); search(pat, awk, target, false); search(pat, grep, target, false); search(pat, egrep, target, false); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, false); search(pat, extended | multiline, target, false); search(pat, awk | multiline, target, false); search(pat, grep | multiline, target, false); search(pat, egrep | multiline, target, false); } { const char* pat = "foo$"; const char* target = "foo"; search(pat, ECMAScript, target, true); search(pat, basic, target, true); search(pat, extended, target, true); search(pat, awk, target, true); search(pat, grep, target, true); search(pat, egrep, target, true); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, true); search(pat, extended | multiline, target, true); search(pat, awk | multiline, target, true); search(pat, grep | multiline, target, true); search(pat, egrep | multiline, target, true); } { const char* pat = "foo$"; const char* target = "foo\n"; search(pat, ECMAScript, target, false); search(pat, basic, target, false); search(pat, extended, target, false); search(pat, awk, target, false); search(pat, grep, target, false); search(pat, egrep, target, false); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, false); search(pat, extended | multiline, target, false); search(pat, awk | multiline, target, false); search(pat, grep | multiline, target, false); search(pat, egrep | multiline, target, false); } { const char* pat = "foo$"; const char* target = "foo\nbar"; search(pat, ECMAScript, target, false); search(pat, basic, target, false); search(pat, extended, target, false); search(pat, awk, target, false); search(pat, grep, target, false); search(pat, egrep, target, false); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, false); search(pat, extended | multiline, target, false); search(pat, awk | multiline, target, false); search(pat, grep | multiline, target, false); search(pat, egrep | multiline, target, false); } { const char* pat = "^foo"; const char* target = "foo"; search(pat, ECMAScript, target, true); search(pat, basic, target, true); search(pat, extended, target, true); search(pat, awk, target, true); search(pat, grep, target, true); search(pat, egrep, target, true); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, true); search(pat, extended | multiline, target, true); search(pat, awk | multiline, target, true); search(pat, grep | multiline, target, true); search(pat, egrep | multiline, target, true); } { const char* pat = "^foo"; const char* target = "\rfoo"; search(pat, ECMAScript, target, false); search(pat, basic, target, false); search(pat, extended, target, false); search(pat, awk, target, false); search(pat, grep, target, false); search(pat, egrep, target, false); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, false); search(pat, extended | multiline, target, false); search(pat, awk | multiline, target, false); search(pat, grep | multiline, target, false); search(pat, egrep | multiline, target, false); } { const char* pat = "^foo"; const char* target = "bar\rfoo"; search(pat, ECMAScript, target, false); search(pat, basic, target, false); search(pat, extended, target, false); search(pat, awk, target, false); search(pat, grep, target, false); search(pat, egrep, target, false); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, false); search(pat, extended | multiline, target, false); search(pat, awk | multiline, target, false); search(pat, grep | multiline, target, false); search(pat, egrep | multiline, target, false); } { const char* pat = "foo$"; const char* target = "foo"; search(pat, ECMAScript, target, true); search(pat, basic, target, true); search(pat, extended, target, true); search(pat, awk, target, true); search(pat, grep, target, true); search(pat, egrep, target, true); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, true); search(pat, extended | multiline, target, true); search(pat, awk | multiline, target, true); search(pat, grep | multiline, target, true); search(pat, egrep | multiline, target, true); } { const char* pat = "foo$"; const char* target = "foo\r"; search(pat, ECMAScript, target, false); search(pat, basic, target, false); search(pat, extended, target, false); search(pat, awk, target, false); search(pat, grep, target, false); search(pat, egrep, target, false); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, false); search(pat, extended | multiline, target, false); search(pat, awk | multiline, target, false); search(pat, grep | multiline, target, false); search(pat, egrep | multiline, target, false); } { const char* pat = "foo$"; const char* target = "foo\rbar"; search(pat, ECMAScript, target, false); search(pat, basic, target, false); search(pat, extended, target, false); search(pat, awk, target, false); search(pat, grep, target, false); search(pat, egrep, target, false); search(pat, ECMAScript | multiline, target, true); search(pat, basic | multiline, target, false); search(pat, extended | multiline, target, false); search(pat, awk | multiline, target, false); search(pat, grep | multiline, target, false); search(pat, egrep | multiline, target, false); } return 0; }