• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 ///////////////////////////////////////////////////////////////////////////////
2 // test_non_char.cpp
3 //
4 //  Copyright 2008 Eric Niebler. Distributed under the Boost
5 //  Software License, Version 1.0. (See accompanying file
6 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 
8 #include <algorithm>
9 #include <boost/xpressive/xpressive.hpp>
10 #include <boost/xpressive/traits/null_regex_traits.hpp>
11 #include "./test.hpp"
12 
13 ///////////////////////////////////////////////////////////////////////////////
14 // test_static
test_static()15 void test_static()
16 {
17     static int const data[] = {0, 1, 2, 3, 4, 5, 6};
18     null_regex_traits<int> nul;
19     basic_regex<int const *> rex = imbue(nul)(1 >> +((set= 2,3) | 4) >> 5);
20     match_results<int const *> what;
21 
22     if(!regex_search(data, data + (sizeof(data)/sizeof(*data)), what, rex))
23     {
24         BOOST_ERROR("regex_search on integral data failed");
25     }
26     else
27     {
28         BOOST_CHECK(*what[0].first == 1);
29         BOOST_CHECK(*what[0].second == 6);
30     }
31 }
32 
33 ///////////////////////////////////////////////////////////////////////////////
34 // UChar
35 struct UChar
36 {
UCharUChar37     UChar(unsigned int code = 0)
38       : code_(code)
39     {}
40 
operator unsigned intUChar41     operator unsigned int () const
42     {
43         return this->code_;
44     }
45 
46 private:
47     unsigned int code_;
48 };
49 
50 ///////////////////////////////////////////////////////////////////////////////
51 // UChar_traits
52 struct UChar_traits
53   : null_regex_traits<UChar>
54 {};
55 
56 ///////////////////////////////////////////////////////////////////////////////
57 // test_dynamic
test_dynamic()58 void test_dynamic()
59 {
60     typedef std::vector<UChar>::const_iterator uchar_iterator;
61     typedef basic_regex<uchar_iterator> uregex;
62     typedef match_results<uchar_iterator> umatch;
63     typedef regex_compiler<uchar_iterator, UChar_traits> uregex_compiler;
64 
65     std::string pattern_("b.*r"), str_("foobarboo");
66     std::vector<UChar> pattern(pattern_.begin(), pattern_.end());
67     std::vector<UChar> str(str_.begin(), str_.end());
68 
69     UChar_traits tr;
70     uregex_compiler compiler(tr);
71     uregex urx = compiler.compile(pattern);
72     umatch what;
73 
74     if(!regex_search(str, what, urx))
75     {
76         BOOST_ERROR("regex_search on UChar failed");
77     }
78     else
79     {
80         BOOST_CHECK_EQUAL(3, what.position());
81         BOOST_CHECK_EQUAL(3, what.length());
82     }
83 
84     // test for range-based regex_replace
85     std::vector<UChar> output = regex_replace(str, urx, pattern_);
86     std::string output_(output.begin(), output.end());
87     std::string expected("foob.*rboo");
88     BOOST_CHECK_EQUAL(output_, expected);
89 }
90 
91 ///////////////////////////////////////////////////////////////////////////////
92 // init_unit_test_suite
93 //
init_unit_test_suite(int argc,char * argv[])94 test_suite* init_unit_test_suite( int argc, char* argv[] )
95 {
96     test_suite *test = BOOST_TEST_SUITE("test_non_char");
97     test->add(BOOST_TEST_CASE(&test_static));
98     test->add(BOOST_TEST_CASE(&test_dynamic));
99     return test;
100 }
101 
102