102 lines
2.8 KiB
C++
102 lines
2.8 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// 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;
|
|
}
|
|
|