1c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//===----------------------------------------------------------------------===//
2c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//
3c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//                     The LLVM Compiler Infrastructure
4c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//
5c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//
8c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//===----------------------------------------------------------------------===//
9c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant
10c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant// <regex>
11c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant
12c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant// template <class BidirectionalIterator, class Allocator, class charT, class traits>
13c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//     bool
14c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//     regex_match(BidirectionalIterator first, BidirectionalIterator last,
15c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//                  match_results<BidirectionalIterator, Allocator>& m,
16c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//                  const basic_regex<charT, traits>& e,
17c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant//                  regex_constants::match_flag_type flags = regex_constants::match_default);
18c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant
19c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant// http://llvm.org/bugs/show_bug.cgi?id=16135
20c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant
21c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant#include <string>
22c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant#include <regex>
23c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant#include <cassert>
24c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant
25c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnantvoid
26c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnanttest1()
27c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant{
28c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::string re{"\\{a\\}"};
29c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::string target{"{a}"};
30c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::regex regex{re};
31c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::smatch smatch;
32c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    assert((std::regex_match(target, smatch, regex)));
33c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant}
34c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant
35c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnantvoid
36c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnanttest2()
37c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant{
38c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::string re{"\\{a\\}"};
39c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::string target{"{a}"};
40c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::regex regex{re, std::regex::extended};
41c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::smatch smatch;
42c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    assert((std::regex_match(target, smatch, regex)));
43c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant}
44c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant
45c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnantvoid
46c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnanttest3()
47c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant{
48c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::string re{"\\{a\\}"};
49c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::string target{"{a}"};
50c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::regex regex{re, std::regex::awk};
51c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::smatch smatch;
52c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    assert((std::regex_match(target, smatch, regex)));
53c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant}
54c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant
55c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnantvoid
56c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnanttest4()
57c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant{
58c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::string re{"\\{a\\}"};
59c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::string target{"{a}"};
60c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::regex regex{re, std::regex::egrep};
61c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    std::smatch smatch;
62c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    assert((std::regex_match(target, smatch, regex)));
63c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant}
64c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant
65c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnantint
66c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnantmain()
67c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant{
68c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    test1();
69c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    test2();
70c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    test3();
71c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant    test4();
72c1ecd97f005317efe271f04c725fdf676653dc93Howard Hinnant}
73