test_non_char.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 102 行

CPP
102
字号
///////////////////////////////////////////////////////////////////////////////// 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_staticvoid 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);    }}///////////////////////////////////////////////////////////////////////////////// UCharstruct UChar{    UChar(unsigned int code = 0)      : code_(code)    {}    operator unsigned int () const    {        return this->code_;    }private:    unsigned int code_;};///////////////////////////////////////////////////////////////////////////////// UChar_traitsstruct UChar_traits  : null_regex_traits<UChar>{};///////////////////////////////////////////////////////////////////////////////// test_dynamicvoid 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;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?