10de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant//===----------------------------------------------------------------------===//
20de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant//
30de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant//                     The LLVM Compiler Infrastructure
40de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
70de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant//
80de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant//===----------------------------------------------------------------------===//
90de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant
100de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant// <regex>
110de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant
120de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant// template <class charT, class traits = regex_traits<charT>> class basic_regex;
130de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant
140de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant// basic_regex(const charT* p, flag_type f = regex_constants::ECMAScript);
150de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant
160de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant#include <regex>
170de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant#include <cassert>
18ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include "test_macros.h"
190de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant
200de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnanttemplate <class CharT>
210de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnantvoid
220de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnanttest(const CharT* p, std::regex_constants::syntax_option_type f, unsigned mc)
230de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant{
240de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant    std::basic_regex<CharT> r(p, f);
250de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant    assert(r.flags() == f);
260de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant    assert(r.mark_count() == mc);
270de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant}
280de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant
290de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnantint main()
300de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant{
310de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant    test("\\(a\\)", std::regex_constants::basic, 1);
320de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant    test("\\(a[bc]\\)", std::regex_constants::basic, 1);
330de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant    test("\\(a\\([bc]\\)\\)", std::regex_constants::basic, 2);
340de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant    test("(a([bc]))", std::regex_constants::basic, 0);
35878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant
36878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a\\)", std::regex_constants::extended, 0);
37878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a[bc]\\)", std::regex_constants::extended, 0);
38878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a\\([bc]\\)\\)", std::regex_constants::extended, 0);
39878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("(a([bc]))", std::regex_constants::extended, 2);
40878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant
41878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a\\)", std::regex_constants::ECMAScript, 0);
42878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a[bc]\\)", std::regex_constants::ECMAScript, 0);
43878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a\\([bc]\\)\\)", std::regex_constants::ECMAScript, 0);
44878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("(a([bc]))", std::regex_constants::ECMAScript, 2);
45878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant
46878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a\\)", std::regex_constants::awk, 0);
47878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a[bc]\\)", std::regex_constants::awk, 0);
48878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a\\([bc]\\)\\)", std::regex_constants::awk, 0);
49878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("(a([bc]))", std::regex_constants::awk, 2);
50878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant
51878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a\\)", std::regex_constants::grep, 1);
52878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a[bc]\\)", std::regex_constants::grep, 1);
53878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a\\([bc]\\)\\)", std::regex_constants::grep, 2);
54878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("(a([bc]))", std::regex_constants::grep, 0);
55878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant
56878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a\\)", std::regex_constants::egrep, 0);
57878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a[bc]\\)", std::regex_constants::egrep, 0);
58878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("\\(a\\([bc]\\)\\)", std::regex_constants::egrep, 0);
59878465043ff69cb10c3e65385c31384ef853d9abHoward Hinnant    test("(a([bc]))", std::regex_constants::egrep, 2);
600de86b6338b4bf222acfee1384ac1fd9b2a08bd9Howard Hinnant}
61