diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-06-25 22:59:01 +0000 |
---|---|---|
committer | <> | 2013-09-27 11:49:28 +0000 |
commit | 8c4528713d907ee2cfd3bfcbbad272c749867f84 (patch) | |
tree | c09e2ce80f47b90c85cc720f5139089ad9c8cfff /libs/algorithm/string/test/regex_test.cpp | |
download | boost-tarball-baserock/morph.tar.gz |
Imported from /home/lorry/working-area/delta_boost-tarball/boost_1_54_0.tar.bz2.boost_1_54_0baserock/morph
Diffstat (limited to 'libs/algorithm/string/test/regex_test.cpp')
-rw-r--r-- | libs/algorithm/string/test/regex_test.cpp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/libs/algorithm/string/test/regex_test.cpp b/libs/algorithm/string/test/regex_test.cpp new file mode 100644 index 000000000..f93c1d9d3 --- /dev/null +++ b/libs/algorithm/string/test/regex_test.cpp @@ -0,0 +1,158 @@ +// Boost string_algo library substr_test.cpp file ------------------// + +// Copyright Pavol Droba 2002-2003. Use, modification and +// distribution is subject to the Boost Software License, Version +// 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +#include <boost/algorithm/string/regex.hpp> +#include <boost/algorithm/string/join.hpp> +#include <boost/algorithm/string/sequence_traits.hpp> +// equals predicate is used for result comparison +#include <boost/algorithm/string/predicate.hpp> + + +// Include unit test framework +#define BOOST_TEST_MAIN +#include <boost/test/unit_test.hpp> + +#include <string> +#include <vector> +#include <iostream> +#include <boost/regex.hpp> +#include <boost/test/test_tools.hpp> + +using namespace std; +using namespace boost; + +static void find_test() +{ + string str1("123a1cxxxa23cXXXa456c321"); + const char* pch1="123a1cxxxa23cXXXa456c321"; + regex rx("a[0-9]+c"); + vector<int> vec1( str1.begin(), str1.end() ); + vector<string> tokens; + + // find results + iterator_range<string::iterator> nc_result; + iterator_range<string::const_iterator> cv_result; + + iterator_range<vector<int>::iterator> nc_vresult; + iterator_range<vector<int>::const_iterator> cv_vresult; + + iterator_range<const char*> ch_result; + + // basic tests + nc_result=find_regex( str1, rx ); + BOOST_CHECK( + ( (nc_result.begin()-str1.begin()) == 3) && + ( (nc_result.end()-str1.begin()) == 6) ); + + cv_result=find_regex( str1, rx ); + BOOST_CHECK( + ( (cv_result.begin()-str1.begin()) == 3) && + ( (cv_result.end()-str1.begin()) == 6) ); + + ch_result=find_regex( pch1, rx ); + BOOST_CHECK(( (ch_result.begin() - pch1 ) == 3) && ( (ch_result.end() - pch1 ) == 6 ) ); + + // multi-type comparison test + nc_vresult=find_regex( vec1, rx ); + BOOST_CHECK( + ( (nc_result.begin()-str1.begin()) == 3) && + ( (nc_result.end()-str1.begin()) == 6) ); + + cv_vresult=find_regex( vec1, rx ); + BOOST_CHECK( + ( (cv_result.begin()-str1.begin()) == 3) && + ( (cv_result.end()-str1.begin()) == 6) ); + + // find_all_regex test + find_all_regex( tokens, str1, rx ); + + BOOST_REQUIRE( tokens.size()==3 ); + BOOST_CHECK( tokens[0]==string("a1c") ); + BOOST_CHECK( tokens[1]==string("a23c") ); + BOOST_CHECK( tokens[2]==string("a456c") ); + + // split_regex test + split_regex( tokens, str1, rx ); + + BOOST_REQUIRE( tokens.size()==4 ); + BOOST_CHECK( tokens[0]==string("123") ); + BOOST_CHECK( tokens[1]==string("xxx") ); + BOOST_CHECK( tokens[2]==string("XXX") ); + BOOST_CHECK( tokens[3]==string("321") ); + +} + +static void join_test() +{ + // Prepare inputs + vector<string> tokens1; + tokens1.push_back("xx"); + tokens1.push_back("abc"); + tokens1.push_back("xx"); + +#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING + BOOST_CHECK( equals(join_if(tokens1, "-", regex("x+")), "xx-xx") ); + BOOST_CHECK( equals(join_if(tokens1, "-", regex("[abc]+")), "abc") ); +#else + BOOST_CHECK( equals(join_if_regex(tokens1, "-", regex("x+")), "xx-xx") ); + BOOST_CHECK( equals(join_if_regex(tokens1, "-", regex("[abc]+")), "abc") ); +#endif +} + +static void replace_test() +{ + string str1("123a1cxxxa23cXXXa456c321"); + regex rx1("a([0-9]+)c"); + regex rx2("([xX]+)"); + regex rx3("_[^_]*_"); + string fmt1("_A$1C_"); + string fmt2("_xXx_"); + vector<int> vec1( str1.begin(), str1.end() ); + + // immutable tests + + // basic tests + BOOST_CHECK( replace_regex_copy( str1, rx1, fmt1 )==string("123_A1C_xxxa23cXXXa456c321") ); + BOOST_CHECK( replace_all_regex_copy( str1, rx1, fmt1 )==string("123_A1C_xxx_A23C_XXX_A456C_321") ); + BOOST_CHECK( erase_regex_copy( str1, rx1 )==string("123xxxa23cXXXa456c321") ); + BOOST_CHECK( erase_all_regex_copy( str1, rx1 )==string(string("123xxxXXX321")) ); + + // output iterator variants test + string strout; + replace_regex_copy( back_inserter(strout), str1, rx1, fmt1 ); + BOOST_CHECK( strout==string("123_A1C_xxxa23cXXXa456c321") ); + strout.clear(); + replace_all_regex_copy( back_inserter(strout), str1, rx1, fmt1 ); + BOOST_CHECK( strout==string("123_A1C_xxx_A23C_XXX_A456C_321") ); + strout.clear(); + erase_regex_copy( back_inserter(strout), str1, rx1 ); + BOOST_CHECK( strout==string("123xxxa23cXXXa456c321") ); + strout.clear(); + erase_all_regex_copy( back_inserter(strout), str1, rx1 ); + BOOST_CHECK( strout==string("123xxxXXX321") ); + strout.clear(); + + // in-place test + replace_regex( str1, rx1, fmt2 ); + BOOST_CHECK( str1==string("123_xXx_xxxa23cXXXa456c321") ); + + replace_all_regex( str1, rx2, fmt1 ); + BOOST_CHECK( str1==string("123__AxXxC___AxxxC_a23c_AXXXC_a456c321") ); + erase_regex( str1, rx3 ); + BOOST_CHECK( str1==string("123AxXxC___AxxxC_a23c_AXXXC_a456c321") ); + erase_all_regex( str1, rx3 ); + BOOST_CHECK( str1==string("123AxXxCa23ca456c321") ); +} + +BOOST_AUTO_TEST_CASE( test_main ) +{ + find_test(); + join_test(); + replace_test(); +} |