Howard Hinnant | 237ee6f | 2010-06-30 17:22:19 +0000 | [diff] [blame] | 1 | //===----------------------------------------------------------------------===// |
| 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 | |
| 22 | int 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 Hinnant | 928658c | 2010-06-30 20:30:19 +0000 | [diff] [blame] | 83 | { |
| 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 Hinnant | 189b212 | 2010-07-07 19:14:52 +0000 | [diff] [blame^] | 107 | 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 Hinnant | 928658c | 2010-06-30 20:30:19 +0000 | [diff] [blame] | 111 | assert(m.prefix().first == s); |
| 112 | assert(m.prefix().second == m[0].first); |
Howard Hinnant | 189b212 | 2010-07-07 19:14:52 +0000 | [diff] [blame^] | 113 | assert(!m.suffix().matched); |
Howard Hinnant | 928658c | 2010-06-30 20:30:19 +0000 | [diff] [blame] | 114 | assert(m.suffix().first == m[0].second); |
Howard Hinnant | 189b212 | 2010-07-07 19:14:52 +0000 | [diff] [blame^] | 115 | 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 Hinnant | 928658c | 2010-06-30 20:30:19 +0000 | [diff] [blame] | 119 | } |
Howard Hinnant | 189b212 | 2010-07-07 19:14:52 +0000 | [diff] [blame^] | 120 | // { |
| 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 Hinnant | 237ee6f | 2010-06-30 17:22:19 +0000 | [diff] [blame] | 142 | } |