]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/algorithm/string/test/regex_test.cpp
1 // Boost string_algo library substr_test.cpp file ------------------//
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)
8 // See http://www.boost.org for updates, documentation, and revision history.
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>
17 // Include unit test framework
18 #define BOOST_TEST_MAIN
19 #include <boost/test/unit_test.hpp>
24 #include <boost/regex.hpp>
25 #include <boost/test/test_tools.hpp>
28 using namespace boost
;
30 static void find_test()
32 string
str1("123a1cxxxa23cXXXa456c321");
33 const char* pch1
="123a1cxxxa23cXXXa456c321";
35 vector
<int> vec1( str1
.begin(), str1
.end() );
36 vector
<string
> tokens
;
39 iterator_range
<string::iterator
> nc_result
;
40 iterator_range
<string::const_iterator
> cv_result
;
42 iterator_range
<vector
<int>::iterator
> nc_vresult
;
43 iterator_range
<vector
<int>::const_iterator
> cv_vresult
;
45 iterator_range
<const char*> ch_result
;
48 nc_result
=find_regex( str1
, rx
);
50 ( (nc_result
.begin()-str1
.begin()) == 3) &&
51 ( (nc_result
.end()-str1
.begin()) == 6) );
53 cv_result
=find_regex( str1
, rx
);
55 ( (cv_result
.begin()-str1
.begin()) == 3) &&
56 ( (cv_result
.end()-str1
.begin()) == 6) );
58 ch_result
=find_regex( pch1
, rx
);
59 BOOST_CHECK(( (ch_result
.begin() - pch1
) == 3) && ( (ch_result
.end() - pch1
) == 6 ) );
61 // multi-type comparison test
62 nc_vresult
=find_regex( vec1
, rx
);
64 ( (nc_result
.begin()-str1
.begin()) == 3) &&
65 ( (nc_result
.end()-str1
.begin()) == 6) );
67 cv_vresult
=find_regex( vec1
, rx
);
69 ( (cv_result
.begin()-str1
.begin()) == 3) &&
70 ( (cv_result
.end()-str1
.begin()) == 6) );
72 // find_all_regex test
73 find_all_regex( tokens
, str1
, rx
);
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") );
81 split_regex( tokens
, str1
, rx
);
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") );
91 static void join_test()
94 vector
<string
> tokens1
;
95 tokens1
.push_back("xx");
96 tokens1
.push_back("abc");
97 tokens1
.push_back("xx");
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") );
103 BOOST_CHECK( equals(join_if_regex(tokens1
, "-", regex("x+")), "xx-xx") );
104 BOOST_CHECK( equals(join_if_regex(tokens1
, "-", regex("[abc]+")), "abc") );
108 static void replace_test()
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() );
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")) );
126 // output iterator variants test
128 replace_regex_copy( back_inserter(strout
), str1
, rx1
, fmt1
);
129 BOOST_CHECK( strout
==string("123_A1C_xxxa23cXXXa456c321") );
131 replace_all_regex_copy( back_inserter(strout
), str1
, rx1
, fmt1
);
132 BOOST_CHECK( strout
==string("123_A1C_xxx_A23C_XXX_A456C_321") );
134 erase_regex_copy( back_inserter(strout
), str1
, rx1
);
135 BOOST_CHECK( strout
==string("123xxxa23cXXXa456c321") );
137 erase_all_regex_copy( back_inserter(strout
), str1
, rx1
);
138 BOOST_CHECK( strout
==string("123xxxXXX321") );
142 replace_regex( str1
, rx1
, fmt2
);
143 BOOST_CHECK( str1
==string("123_xXx_xxxa23cXXXa456c321") );
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") );
153 BOOST_AUTO_TEST_CASE( test_main
)