blob: 206ea3524d1747becfdecfa6417de30ba01a8713 [file] [log] [blame]
Howard Hinnant237ee6f2010-06-30 17:22:19 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <regex>
11
12// template <class BidirectionalIterator, class Allocator, class charT, class traits>
13// bool
14// regex_search(BidirectionalIterator first, BidirectionalIterator last,
15// match_results<BidirectionalIterator, Allocator>& m,
16// const basic_regex<charT, traits>& e,
17// regex_constants::match_flag_type flags = regex_constants::match_default);
18
19#include <regex>
20#include <cassert>
21
22int main()
23{
24 {
25 std::cmatch m;
26 assert(!std::regex_search("a", m, std::regex()));
27 assert(m.size() == 0);
28 assert(m.empty());
29 }
30 {
31 std::cmatch m;
32 const char s[] = "a";
33 assert(std::regex_search(s, m, std::regex("a", std::regex_constants::basic)));
34 assert(m.size() == 1);
35 assert(!m.empty());
36 assert(!m.prefix().matched);
37 assert(m.prefix().first == s);
38 assert(m.prefix().second == m[0].first);
39 assert(!m.suffix().matched);
40 assert(m.suffix().first == m[0].second);
41 assert(m.suffix().second == s+1);
42 assert(m.length(0) == 1);
43 assert(m.position(0) == 0);
44 assert(m.str(0) == "a");
45 }
46 {
47 std::cmatch m;
48 const char s[] = "ab";
49 assert(std::regex_search(s, m, std::regex("ab", std::regex_constants::basic)));
50 assert(m.size() == 1);
51 assert(!m.prefix().matched);
52 assert(m.prefix().first == s);
53 assert(m.prefix().second == m[0].first);
54 assert(!m.suffix().matched);
55 assert(m.suffix().first == m[0].second);
56 assert(m.suffix().second == s+2);
57 assert(m.length(0) == 2);
58 assert(m.position(0) == 0);
59 assert(m.str(0) == "ab");
60 }
61 {
62 std::cmatch m;
63 const char s[] = "ab";
64 assert(!std::regex_search(s, m, std::regex("ba", std::regex_constants::basic)));
65 assert(m.size() == 0);
66 assert(m.empty());
67 }
68 {
69 std::cmatch m;
70 const char s[] = "aab";
71 assert(std::regex_search(s, m, std::regex("ab", std::regex_constants::basic)));
72 assert(m.size() == 1);
73 assert(m.prefix().matched);
74 assert(m.prefix().first == s);
75 assert(m.prefix().second == m[0].first);
76 assert(!m.suffix().matched);
77 assert(m.suffix().first == m[0].second);
78 assert(m.suffix().second == s+3);
79 assert(m.length(0) == 2);
80 assert(m.position(0) == 1);
81 assert(m.str(0) == "ab");
82 }
Howard Hinnant928658c2010-06-30 20:30:19 +000083 {
84 std::cmatch m;
85 const char s[] = "aab";
86 assert(!std::regex_search(s, m, std::regex("ab", std::regex_constants::basic),
87 std::regex_constants::match_continuous));
88 assert(m.size() == 0);
89 }
90 {
91 std::cmatch m;
92 const char s[] = "abcd";
93 assert(std::regex_search(s, m, std::regex("bc", std::regex_constants::basic)));
94 assert(m.size() == 1);
95 assert(m.prefix().matched);
96 assert(m.prefix().first == s);
97 assert(m.prefix().second == m[0].first);
98 assert(m.suffix().matched);
99 assert(m.suffix().first == m[0].second);
100 assert(m.suffix().second == s+4);
101 assert(m.length(0) == 2);
102 assert(m.position(0) == 1);
103 assert(m.str(0) == "bc");
104 }
105 {
106 std::cmatch m;
Howard Hinnant189b2122010-07-07 19:14:52 +0000107 const char s[] = "abbc";
108 assert(std::regex_search(s, m, std::regex("ab*c", std::regex_constants::basic)));
109 assert(m.size() == 1);
110 assert(!m.prefix().matched);
Howard Hinnant928658c2010-06-30 20:30:19 +0000111 assert(m.prefix().first == s);
112 assert(m.prefix().second == m[0].first);
Howard Hinnant189b2122010-07-07 19:14:52 +0000113 assert(!m.suffix().matched);
Howard Hinnant928658c2010-06-30 20:30:19 +0000114 assert(m.suffix().first == m[0].second);
Howard Hinnant189b2122010-07-07 19:14:52 +0000115 assert(m.suffix().second == s+4);
116 assert(m.length(0) == 4);
117 assert(m.position(0) == 0);
118 assert(m.str(0) == s);
Howard Hinnant928658c2010-06-30 20:30:19 +0000119 }
Howard Hinnant189b2122010-07-07 19:14:52 +0000120// {
121// std::cmatch m;
122// const char s[] = "abcdefghijk";
123// assert(std::regex_search(s, m, std::regex("cd\\(\\(e\\)fg\\)hi",
124// std::regex_constants::basic)));
125// assert(m.size() == 3);
126// assert(m.prefix().matched);
127// assert(m.prefix().first == s);
128// assert(m.prefix().second == m[0].first);
129// assert(m.suffix().matched);
130// assert(m.suffix().first == m[0].second);
131// assert(m.suffix().second == s+std::regex_traits<char>::length(s));
132// assert(m.length(0) == 7);
133// assert(m.position(0) == 2);
134// assert(m.str(0) == "cdefghi");
135// assert(m.length(1) == 3);
136// assert(m.position(1) == 4);
137// assert(m.str(1) == "efg");
138// assert(m.length(2) == 1);
139// assert(m.position(2) == 4);
140// assert(m.str(2) == "e");
141// }
Howard Hinnant237ee6f2010-06-30 17:22:19 +0000142}