/////////////////////////////////////////////////////////////////////////////// // misc2.hpp // // Copyright 2008 Eric Niebler. Distributed under 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) #include #include #include #include #include namespace xpr = boost::xpressive; using namespace xpr; /////////////////////////////////////////////////////////////////////////////// // void test_complement() { sregex rx1 = ~_n >> ~(set='a') >> ~(set='a','b') >> ~set['a'] >> ~_ln >> ~before('a') >> ~after('a') >> ~alpha >> ~range('a','b') >> ~_b >> ~as_xpr('a'); #ifndef BOOST_XPRESSIVE_NO_WREGEX wsregex rx2 = ~_n >> ~(set=L'a') >> ~(set=L'a',L'b') >> ~set[L'a'] >> ~_ln >> ~before(L'a') >> ~after(L'a') >> ~alpha >> ~range(L'a',L'b') >> ~_b >> ~as_xpr(L'a'); #endif } /////////////////////////////////////////////////////////////////////////////// // void test_static_actions_in_dynamic_keep() { std::string result; std::string str("foo"); sregex_compiler compiler; compiler["rx0"] = (s1="foo")[ xpr::ref(result) = s1 ]; sregex rx = compiler.compile("(?>(?$rx0))"); bool ok = regex_match(str, rx); BOOST_CHECK(ok); BOOST_CHECK_EQUAL(result, "foo"); } /////////////////////////////////////////////////////////////////////////////// // void test_static_actions_in_static_keep() { std::string result; std::string str("foo"); sregex rx0 = (s1="foo")[ xpr::ref(result) = s1 ]; sregex rx = keep(rx0); bool ok = regex_match(str, rx); BOOST_CHECK(ok); BOOST_CHECK_EQUAL(result, "foo"); } /////////////////////////////////////////////////////////////////////////////// // void test_replace_with_lambda() { std::map replacements; replacements["X"] = "this"; replacements["Y"] = "that"; std::string input("\"$(X)\" has the value \"$(Y)\""), output; std::string expected("\"this\" has the value \"that\""); sregex rx = "$(" >> (s1= +~as_xpr(')')) >> ')'; output = regex_replace(input, rx, xpr::ref(replacements)[s1]); BOOST_CHECK_EQUAL(output, expected); } using namespace boost::unit_test; /////////////////////////////////////////////////////////////////////////////// // init_unit_test_suite // test_suite* init_unit_test_suite( int argc, char* argv[] ) { test_suite *test = BOOST_TEST_SUITE("miscelaneous tests"); test->add(BOOST_TEST_CASE(&test_complement)); test->add(BOOST_TEST_CASE(&test_static_actions_in_dynamic_keep)); test->add(BOOST_TEST_CASE(&test_static_actions_in_static_keep)); test->add(BOOST_TEST_CASE(&test_replace_with_lambda)); return test; }