/////////////////////////////////////////////////////////////////////////////// // test_non_char.cpp // // 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 "./test.hpp" /////////////////////////////////////////////////////////////////////////////// // test_static void test_static() { static int const data[] = {0, 1, 2, 3, 4, 5, 6}; null_regex_traits nul; basic_regex rex = imbue(nul)(1 >> +((set= 2,3) | 4) >> 5); match_results what; if(!regex_search(data, data + (sizeof(data)/sizeof(*data)), what, rex)) { BOOST_ERROR("regex_search on integral data failed"); } else { BOOST_CHECK(*what[0].first == 1); BOOST_CHECK(*what[0].second == 6); } } /////////////////////////////////////////////////////////////////////////////// // UChar struct UChar { UChar(unsigned int code = 0) : code_(code) {} operator unsigned int () const { return this->code_; } private: unsigned int code_; }; /////////////////////////////////////////////////////////////////////////////// // UChar_traits struct UChar_traits : null_regex_traits {}; /////////////////////////////////////////////////////////////////////////////// // test_dynamic void test_dynamic() { typedef std::vector::const_iterator uchar_iterator; typedef basic_regex uregex; typedef match_results umatch; typedef regex_compiler uregex_compiler; std::string pattern_("b.*r"), str_("foobarboo"); std::vector pattern(pattern_.begin(), pattern_.end()); std::vector str(str_.begin(), str_.end()); UChar_traits tr; uregex_compiler compiler(tr); uregex urx = compiler.compile(pattern); umatch what; if(!regex_search(str, what, urx)) { BOOST_ERROR("regex_search on UChar failed"); } else { BOOST_CHECK_EQUAL(3, what.position()); BOOST_CHECK_EQUAL(3, what.length()); } // test for range-based regex_replace std::vector output = regex_replace(str, urx, pattern_); std::string output_(output.begin(), output.end()); std::string expected("foob.*rboo"); BOOST_CHECK_EQUAL(output_, expected); } /////////////////////////////////////////////////////////////////////////////// // init_unit_test_suite // test_suite* init_unit_test_suite( int argc, char* argv[] ) { test_suite *test = BOOST_TEST_SUITE("test_non_char"); test->add(BOOST_TEST_CASE(&test_static)); test->add(BOOST_TEST_CASE(&test_dynamic)); return test; }