123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- ///////////////////////////////////////////////////////////////////////////////
- // 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 <algorithm>
- #include <boost/xpressive/xpressive.hpp>
- #include <boost/xpressive/traits/null_regex_traits.hpp>
- #include "./test.hpp"
- ///////////////////////////////////////////////////////////////////////////////
- // test_static
- void test_static()
- {
- static int const data[] = {0, 1, 2, 3, 4, 5, 6};
- null_regex_traits<int> nul;
- basic_regex<int const *> rex = imbue(nul)(1 >> +((set= 2,3) | 4) >> 5);
- match_results<int const *> 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<UChar>
- {};
- ///////////////////////////////////////////////////////////////////////////////
- // test_dynamic
- void test_dynamic()
- {
- typedef std::vector<UChar>::const_iterator uchar_iterator;
- typedef basic_regex<uchar_iterator> uregex;
- typedef match_results<uchar_iterator> umatch;
- typedef regex_compiler<uchar_iterator, UChar_traits> uregex_compiler;
- std::string pattern_("b.*r"), str_("foobarboo");
- std::vector<UChar> pattern(pattern_.begin(), pattern_.end());
- std::vector<UChar> 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<UChar> 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;
- }
|