brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.3 KiB · 91cffaa Raw
272 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++0310 11// <regex>12 13// multiline:14//     Specifies that ^ shall match the beginning of a line and $ shall match15//     the end of a line, if the ECMAScript engine is selected.16 17#include <regex>18#include <cassert>19#include "test_macros.h"20 21static void search(const char* pat, std::regex_constants::syntax_option_type f,22                   const char* target, bool expected)23{24    std::regex re(pat, f);25    std::cmatch m;26    assert(std::regex_search(target, m, re) == expected);27 28    if(expected) {29        assert(m.size() == 1);30        assert(m.length(0) == 3);31        assert(m.str(0) == "foo");32    }33    else34    {35        assert(m.size() == 0);36    }37}38 39int main(int, char**)40{41    using std::regex_constants::ECMAScript;42    using std::regex_constants::basic;43    using std::regex_constants::extended;44    using std::regex_constants::awk;45    using std::regex_constants::grep;46    using std::regex_constants::egrep;47    using std::regex_constants::multiline;48 49    {50        const char* pat = "^foo";51        const char* target = "foo";52 53        search(pat, ECMAScript, target, true);54        search(pat, basic, target, true);55        search(pat, extended, target, true);56        search(pat, awk, target, true);57        search(pat, grep, target, true);58        search(pat, egrep, target, true);59 60        search(pat, ECMAScript | multiline, target, true);61        search(pat, basic | multiline, target, true);62        search(pat, extended | multiline, target, true);63        search(pat, awk | multiline, target, true);64        search(pat, grep | multiline, target, true);65        search(pat, egrep | multiline, target, true);66    }67    {68        const char* pat = "^foo";69        const char* target = "\nfoo";70 71        search(pat, ECMAScript, target, false);72        search(pat, basic, target, false);73        search(pat, extended, target, false);74        search(pat, awk, target, false);75        search(pat, grep, target, false);76        search(pat, egrep, target, false);77 78        search(pat, ECMAScript | multiline, target, true);79        search(pat, basic | multiline, target, false);80        search(pat, extended | multiline, target, false);81        search(pat, awk | multiline, target, false);82        search(pat, grep | multiline, target, false);83        search(pat, egrep | multiline, target, false);84    }85    {86        const char* pat = "^foo";87        const char* target = "bar\nfoo";88 89        search(pat, ECMAScript, target, false);90        search(pat, basic, target, false);91        search(pat, extended, target, false);92        search(pat, awk, target, false);93        search(pat, grep, target, false);94        search(pat, egrep, target, false);95 96        search(pat, ECMAScript | multiline, target, true);97        search(pat, basic | multiline, target, false);98        search(pat, extended | multiline, target, false);99        search(pat, awk | multiline, target, false);100        search(pat, grep | multiline, target, false);101        search(pat, egrep | multiline, target, false);102    }103 104    {105        const char* pat = "foo$";106        const char* target = "foo";107 108        search(pat, ECMAScript, target, true);109        search(pat, basic, target, true);110        search(pat, extended, target, true);111        search(pat, awk, target, true);112        search(pat, grep, target, true);113        search(pat, egrep, target, true);114 115        search(pat, ECMAScript | multiline, target, true);116        search(pat, basic | multiline, target, true);117        search(pat, extended | multiline, target, true);118        search(pat, awk | multiline, target, true);119        search(pat, grep | multiline, target, true);120        search(pat, egrep | multiline, target, true);121    }122    {123        const char* pat = "foo$";124        const char* target = "foo\n";125 126        search(pat, ECMAScript, target, false);127        search(pat, basic, target, false);128        search(pat, extended, target, false);129        search(pat, awk, target, false);130        search(pat, grep, target, false);131        search(pat, egrep, target, false);132 133        search(pat, ECMAScript | multiline, target, true);134        search(pat, basic | multiline, target, false);135        search(pat, extended | multiline, target, false);136        search(pat, awk | multiline, target, false);137        search(pat, grep | multiline, target, false);138        search(pat, egrep | multiline, target, false);139    }140    {141        const char* pat = "foo$";142        const char* target = "foo\nbar";143 144        search(pat, ECMAScript, target, false);145        search(pat, basic, target, false);146        search(pat, extended, target, false);147        search(pat, awk, target, false);148        search(pat, grep, target, false);149        search(pat, egrep, target, false);150 151        search(pat, ECMAScript | multiline, target, true);152        search(pat, basic | multiline, target, false);153        search(pat, extended | multiline, target, false);154        search(pat, awk | multiline, target, false);155        search(pat, grep | multiline, target, false);156        search(pat, egrep | multiline, target, false);157    }158 159 160    {161        const char* pat = "^foo";162        const char* target = "foo";163 164        search(pat, ECMAScript, target, true);165        search(pat, basic, target, true);166        search(pat, extended, target, true);167        search(pat, awk, target, true);168        search(pat, grep, target, true);169        search(pat, egrep, target, true);170 171        search(pat, ECMAScript | multiline, target, true);172        search(pat, basic | multiline, target, true);173        search(pat, extended | multiline, target, true);174        search(pat, awk | multiline, target, true);175        search(pat, grep | multiline, target, true);176        search(pat, egrep | multiline, target, true);177    }178    {179        const char* pat = "^foo";180        const char* target = "\rfoo";181 182        search(pat, ECMAScript, target, false);183        search(pat, basic, target, false);184        search(pat, extended, target, false);185        search(pat, awk, target, false);186        search(pat, grep, target, false);187        search(pat, egrep, target, false);188 189        search(pat, ECMAScript | multiline, target, true);190        search(pat, basic | multiline, target, false);191        search(pat, extended | multiline, target, false);192        search(pat, awk | multiline, target, false);193        search(pat, grep | multiline, target, false);194        search(pat, egrep | multiline, target, false);195    }196    {197        const char* pat = "^foo";198        const char* target = "bar\rfoo";199 200        search(pat, ECMAScript, target, false);201        search(pat, basic, target, false);202        search(pat, extended, target, false);203        search(pat, awk, target, false);204        search(pat, grep, target, false);205        search(pat, egrep, target, false);206 207        search(pat, ECMAScript | multiline, target, true);208        search(pat, basic | multiline, target, false);209        search(pat, extended | multiline, target, false);210        search(pat, awk | multiline, target, false);211        search(pat, grep | multiline, target, false);212        search(pat, egrep | multiline, target, false);213    }214 215    {216        const char* pat = "foo$";217        const char* target = "foo";218 219        search(pat, ECMAScript, target, true);220        search(pat, basic, target, true);221        search(pat, extended, target, true);222        search(pat, awk, target, true);223        search(pat, grep, target, true);224        search(pat, egrep, target, true);225 226        search(pat, ECMAScript | multiline, target, true);227        search(pat, basic | multiline, target, true);228        search(pat, extended | multiline, target, true);229        search(pat, awk | multiline, target, true);230        search(pat, grep | multiline, target, true);231        search(pat, egrep | multiline, target, true);232    }233    {234        const char* pat = "foo$";235        const char* target = "foo\r";236 237        search(pat, ECMAScript, target, false);238        search(pat, basic, target, false);239        search(pat, extended, target, false);240        search(pat, awk, target, false);241        search(pat, grep, target, false);242        search(pat, egrep, target, false);243 244        search(pat, ECMAScript | multiline, target, true);245        search(pat, basic | multiline, target, false);246        search(pat, extended | multiline, target, false);247        search(pat, awk | multiline, target, false);248        search(pat, grep | multiline, target, false);249        search(pat, egrep | multiline, target, false);250    }251    {252        const char* pat = "foo$";253        const char* target = "foo\rbar";254 255        search(pat, ECMAScript, target, false);256        search(pat, basic, target, false);257        search(pat, extended, target, false);258        search(pat, awk, target, false);259        search(pat, grep, target, false);260        search(pat, egrep, target, false);261 262        search(pat, ECMAScript | multiline, target, true);263        search(pat, basic | multiline, target, false);264        search(pat, extended | multiline, target, false);265        search(pat, awk | multiline, target, false);266        search(pat, grep | multiline, target, false);267        search(pat, egrep | multiline, target, false);268    }269 270    return 0;271}272