summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/xpressive/test/test_non_char.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/xpressive/test/test_non_char.cpp')
-rw-r--r--src/boost/libs/xpressive/test/test_non_char.cpp101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/boost/libs/xpressive/test/test_non_char.cpp b/src/boost/libs/xpressive/test/test_non_char.cpp
new file mode 100644
index 00000000..ebfb3d68
--- /dev/null
+++ b/src/boost/libs/xpressive/test/test_non_char.cpp
@@ -0,0 +1,101 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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;
+}
+