]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/algorithm/string/test/regex_test.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / algorithm / string / test / regex_test.cpp
1 // Boost string_algo library substr_test.cpp file ------------------//
2
3 // Copyright Pavol Droba 2002-2003. Use, modification and
4 // distribution is subject to the Boost Software License, Version
5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
7
8 // See http://www.boost.org for updates, documentation, and revision history.
9
10 #include <boost/algorithm/string/regex.hpp>
11 #include <boost/algorithm/string/join.hpp>
12 #include <boost/algorithm/string/sequence_traits.hpp>
13 // equals predicate is used for result comparison
14 #include <boost/algorithm/string/predicate.hpp>
15
16
17 // Include unit test framework
18 #define BOOST_TEST_MAIN
19 #include <boost/test/unit_test.hpp>
20
21 #include <string>
22 #include <vector>
23 #include <iostream>
24 #include <boost/regex.hpp>
25 #include <boost/test/test_tools.hpp>
26
27 using namespace std;
28 using namespace boost;
29
30 static void find_test()
31 {
32 string str1("123a1cxxxa23cXXXa456c321");
33 const char* pch1="123a1cxxxa23cXXXa456c321";
34 regex rx("a[0-9]+c");
35 vector<int> vec1( str1.begin(), str1.end() );
36 vector<string> tokens;
37
38 // find results
39 iterator_range<string::iterator> nc_result;
40 iterator_range<string::const_iterator> cv_result;
41
42 iterator_range<vector<int>::iterator> nc_vresult;
43 iterator_range<vector<int>::const_iterator> cv_vresult;
44
45 iterator_range<const char*> ch_result;
46
47 // basic tests
48 nc_result=find_regex( str1, rx );
49 BOOST_CHECK(
50 ( (nc_result.begin()-str1.begin()) == 3) &&
51 ( (nc_result.end()-str1.begin()) == 6) );
52
53 cv_result=find_regex( str1, rx );
54 BOOST_CHECK(
55 ( (cv_result.begin()-str1.begin()) == 3) &&
56 ( (cv_result.end()-str1.begin()) == 6) );
57
58 ch_result=find_regex( pch1, rx );
59 BOOST_CHECK(( (ch_result.begin() - pch1 ) == 3) && ( (ch_result.end() - pch1 ) == 6 ) );
60
61 // multi-type comparison test
62 nc_vresult=find_regex( vec1, rx );
63 BOOST_CHECK(
64 ( (nc_result.begin()-str1.begin()) == 3) &&
65 ( (nc_result.end()-str1.begin()) == 6) );
66
67 cv_vresult=find_regex( vec1, rx );
68 BOOST_CHECK(
69 ( (cv_result.begin()-str1.begin()) == 3) &&
70 ( (cv_result.end()-str1.begin()) == 6) );
71
72 // find_all_regex test
73 find_all_regex( tokens, str1, rx );
74
75 BOOST_REQUIRE( tokens.size()==3 );
76 BOOST_CHECK( tokens[0]==string("a1c") );
77 BOOST_CHECK( tokens[1]==string("a23c") );
78 BOOST_CHECK( tokens[2]==string("a456c") );
79
80 // split_regex test
81 split_regex( tokens, str1, rx );
82
83 BOOST_REQUIRE( tokens.size()==4 );
84 BOOST_CHECK( tokens[0]==string("123") );
85 BOOST_CHECK( tokens[1]==string("xxx") );
86 BOOST_CHECK( tokens[2]==string("XXX") );
87 BOOST_CHECK( tokens[3]==string("321") );
88
89 }
90
91 static void join_test()
92 {
93 // Prepare inputs
94 vector<string> tokens1;
95 tokens1.push_back("xx");
96 tokens1.push_back("abc");
97 tokens1.push_back("xx");
98
99 #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
100 BOOST_CHECK( equals(join_if(tokens1, "-", regex("x+")), "xx-xx") );
101 BOOST_CHECK( equals(join_if(tokens1, "-", regex("[abc]+")), "abc") );
102 #else
103 BOOST_CHECK( equals(join_if_regex(tokens1, "-", regex("x+")), "xx-xx") );
104 BOOST_CHECK( equals(join_if_regex(tokens1, "-", regex("[abc]+")), "abc") );
105 #endif
106 }
107
108 static void replace_test()
109 {
110 string str1("123a1cxxxa23cXXXa456c321");
111 regex rx1("a([0-9]+)c");
112 regex rx2("([xX]+)");
113 regex rx3("_[^_]*_");
114 string fmt1("_A$1C_");
115 string fmt2("_xXx_");
116 vector<int> vec1( str1.begin(), str1.end() );
117
118 // immutable tests
119
120 // basic tests
121 BOOST_CHECK( replace_regex_copy( str1, rx1, fmt1 )==string("123_A1C_xxxa23cXXXa456c321") );
122 BOOST_CHECK( replace_all_regex_copy( str1, rx1, fmt1 )==string("123_A1C_xxx_A23C_XXX_A456C_321") );
123 BOOST_CHECK( erase_regex_copy( str1, rx1 )==string("123xxxa23cXXXa456c321") );
124 BOOST_CHECK( erase_all_regex_copy( str1, rx1 )==string(string("123xxxXXX321")) );
125
126 // output iterator variants test
127 string strout;
128 replace_regex_copy( back_inserter(strout), str1, rx1, fmt1 );
129 BOOST_CHECK( strout==string("123_A1C_xxxa23cXXXa456c321") );
130 strout.clear();
131 replace_all_regex_copy( back_inserter(strout), str1, rx1, fmt1 );
132 BOOST_CHECK( strout==string("123_A1C_xxx_A23C_XXX_A456C_321") );
133 strout.clear();
134 erase_regex_copy( back_inserter(strout), str1, rx1 );
135 BOOST_CHECK( strout==string("123xxxa23cXXXa456c321") );
136 strout.clear();
137 erase_all_regex_copy( back_inserter(strout), str1, rx1 );
138 BOOST_CHECK( strout==string("123xxxXXX321") );
139 strout.clear();
140
141 // in-place test
142 replace_regex( str1, rx1, fmt2 );
143 BOOST_CHECK( str1==string("123_xXx_xxxa23cXXXa456c321") );
144
145 replace_all_regex( str1, rx2, fmt1 );
146 BOOST_CHECK( str1==string("123__AxXxC___AxxxC_a23c_AXXXC_a456c321") );
147 erase_regex( str1, rx3 );
148 BOOST_CHECK( str1==string("123AxXxC___AxxxC_a23c_AXXXC_a456c321") );
149 erase_all_regex( str1, rx3 );
150 BOOST_CHECK( str1==string("123AxXxCa23ca456c321") );
151 }
152
153 BOOST_AUTO_TEST_CASE( test_main )
154 {
155 find_test();
156 join_test();
157 replace_test();
158 }