test.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 264 行

HPP
264
字号
/* * * Copyright (c) 2004 * John Maddock * * Use, modification and distribution are subject to 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) * */ /*  *   LOCATION:    see http://www.boost.org for most recent version.  *   FILE         test.hpp  *   VERSION      see <boost/version.hpp>  *   DESCRIPTION: Macros for test cases.  */#ifndef BOOST_REGEX_REGRESS_TEST_HPP#define BOOST_REGEX_REGRESS_TEST_HPP#include <typeinfo>#include "test_not_regex.hpp"#include "test_regex_search.hpp"#include "test_regex_replace.hpp"#include "test_deprecated.hpp"#include "test_mfc.hpp"#include "test_icu.hpp"#include "test_locale.hpp"//// define test entry proc, this forwards on to the appropriate// real test://template <class charT, class tagT>void do_test(const charT& c, const tagT& tag);template <class charT, class tagT>void test(const charT& c, const tagT& tag){   do_test(c, tag);}// // make these non-templates to speed up compilation times://void test(const char&, const test_regex_replace_tag&);void test(const char&, const test_regex_search_tag&);void test(const char&, const test_invalid_regex_tag&);#ifndef BOOST_NO_WREGEXvoid test(const wchar_t&, const test_regex_replace_tag&);void test(const wchar_t&, const test_regex_search_tag&);void test(const wchar_t&, const test_invalid_regex_tag&);#endiftemplate <class charT, class tagT>void do_test(const charT& c, const tagT& tag){#ifndef BOOST_NO_STD_LOCALE#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) && defined(TEST_THREADS)   // typeid appears to fail in multithreaded environments:   test_info<charT>::set_typename("");#else   test_info<charT>::set_typename(typeid(boost::basic_regex<charT, boost::cpp_regex_traits<charT> >).name());#endif   boost::basic_regex<charT, boost::cpp_regex_traits<charT> > e1;   static bool done_empty_test = false;   if(done_empty_test == false)   {      test_empty(e1);      done_empty_test = true;   }   if(test_locale::cpp_locale_state() == test_locale::test_with_locale)      e1.imbue(test_locale::cpp_locale());   if(test_locale::cpp_locale_state() != test_locale::no_test)      test(e1, tag);#endif#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560)#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) && defined(TEST_THREADS)   // typeid appears to fail in multithreaded environments:   test_info<charT>::set_typename("");#else   test_info<charT>::set_typename(typeid(boost::basic_regex<charT, boost::c_regex_traits<charT> >).name());#endif   boost::basic_regex<charT, boost::c_regex_traits<charT> > e2;   if(test_locale::c_locale_state() != test_locale::no_test)      test(e2, tag);#endif#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32)#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) && defined(TEST_THREADS)   // typeid appears to fail in multithreaded environments:   test_info<charT>::set_typename("");#else   test_info<charT>::set_typename(typeid(boost::basic_regex<charT, boost::w32_regex_traits<charT> >).name());#endif   boost::basic_regex<charT, boost::w32_regex_traits<charT> > e3;   if(test_locale::win_locale_state() == test_locale::test_with_locale)      e3.imbue(test_locale::win_locale());   if(test_locale::win_locale_state() != test_locale::no_test)      test(e3, tag);#endif   // test old depecated code:   test_info<charT>::set_typename("Deprecated interfaces");   if((test_locale::win_locale_state() == test_locale::test_no_locale)      && (test_locale::c_locale_state() == test_locale::test_no_locale)      &&(test_locale::cpp_locale_state() == test_locale::test_no_locale))      test_deprecated(c, tag);   // test MFC/ATL wrappers:   test_info<charT>::set_typename("MFC/ATL interfaces");   if((test_locale::win_locale_state() == test_locale::test_no_locale)      && (test_locale::c_locale_state() == test_locale::test_no_locale)      &&(test_locale::cpp_locale_state() == test_locale::test_no_locale))      test_mfc(c, tag);   // test ICU code:   test_info<charT>::set_typename("ICU interfaces");   test_icu(c, tag);}//// define function to pack args into an array://const int* make_array(int first, ...);//// define macros for testing invalid regexes://#define TEST_INVALID_REGEX_N(s, f)\   do{\      const char e[] = { s };\      std::string se(e, sizeof(e) - 1);\      test_info<char>::set_info(__FILE__, __LINE__, se, f);\      test(char(0), test_invalid_regex_tag());\   }while(0)#ifndef BOOST_NO_WREGEX#define TEST_INVALID_REGEX_W(s, f)\   do{\      const wchar_t e[] = { s };\      std::wstring se(e, (sizeof(e) / sizeof(wchar_t)) - 1);\      test_info<wchar_t>::set_info(__FILE__, __LINE__, se, f);\      test(wchar_t(0), test_invalid_regex_tag());\   }while(0)#else#define TEST_INVALID_REGEX_W(s, f)#endif#define TEST_INVALID_REGEX(s, f)\   TEST_INVALID_REGEX_N(s, f);\   TEST_INVALID_REGEX_W(BOOST_JOIN(L, s), f)//// define macros for testing regex searches://#define TEST_REGEX_SEARCH_N(s, f, t, m, a)\   do{\      const char e[] = { s };\      std::string se(e, sizeof(e) - 1);\      const char st[] = { t };\      std::string sst(st, sizeof(st) - 1);\      test_info<char>::set_info(__FILE__, __LINE__, se, f, sst, m, a);\      test(char(0), test_regex_search_tag());\   }while(0)#ifndef BOOST_NO_WREGEX#define TEST_REGEX_SEARCH_W(s, f, t, m, a)\   do{\      const wchar_t e[] = { s };\      std::wstring se(e, (sizeof(e) / sizeof(wchar_t)) - 1);\      const wchar_t st[] = { t };\      std::wstring sst(st, (sizeof(st) / sizeof(wchar_t)) - 1);\      test_info<wchar_t>::set_info(__FILE__, __LINE__, se, f, sst, m, a);\      test(wchar_t(0), test_regex_search_tag());\   }while(0)#else#define TEST_REGEX_SEARCH_W(s, f, t, m, a)#endif#define TEST_REGEX_SEARCH(s, f, t, m, a)\   TEST_REGEX_SEARCH_N(s, f, t, m, a);\   TEST_REGEX_SEARCH_W(BOOST_JOIN(L, s), f, BOOST_JOIN(L, t), m, a)#if (defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))#define TEST_REGEX_SEARCH_L(s, f, t, m, a) TEST_REGEX_SEARCH_W(BOOST_JOIN(L, s), f, BOOST_JOIN(L, t), m, a)#else#define TEST_REGEX_SEARCH_L(s, f, t, m, a) TEST_REGEX_SEARCH(s, f, t, m, a)#endif//// define macros for testing regex replaces://#define TEST_REGEX_REPLACE_N(s, f, t, m, fs, r)\   do{\      const char e[] = { s };\      std::string se(e, sizeof(e) - 1);\      const char st[] = { t };\      std::string sst(st, sizeof(st) - 1);\      const char ft[] = { fs };\      std::string sft(ft, sizeof(ft) - 1);\      const char rt[] = { r };\      std::string srt(rt, sizeof(rt) - 1);\      test_info<char>::set_info(__FILE__, __LINE__, se, f, sst, m, 0, sft, srt);\      test(char(0), test_regex_replace_tag());\   }while(0)#ifndef BOOST_NO_WREGEX#define TEST_REGEX_REPLACE_W(s, f, t, m, fs, r)\   do{\      const wchar_t e[] = { s };\      std::wstring se(e, (sizeof(e) / sizeof(wchar_t)) - 1);\      const wchar_t st[] = { t };\      std::wstring sst(st, (sizeof(st) / sizeof(wchar_t)) - 1);\      const wchar_t ft[] = { fs };\      std::wstring sft(ft, (sizeof(ft) / sizeof(wchar_t)) - 1);\      const wchar_t rt[] = { r };\      std::wstring srt(rt, (sizeof(rt) / sizeof(wchar_t)) - 1);\      test_info<wchar_t>::set_info(__FILE__, __LINE__, se, f, sst, m, 0, sft, srt);\      test(wchar_t(0), test_regex_replace_tag());\   }while(0)#else#define TEST_REGEX_REPLACE_W(s, f, t, m, fs, r)#endif#define TEST_REGEX_REPLACE(s, f, t, m, fs, r)\   TEST_REGEX_REPLACE_N(s, f, t, m, fs, r);\   TEST_REGEX_REPLACE_W(BOOST_JOIN(L, s), f, BOOST_JOIN(L, t), m, BOOST_JOIN(L, fs), BOOST_JOIN(L, r))//// define the test group proceedures://void basic_tests();void test_simple_repeats();void test_alt();void test_sets();void test_sets2();void test_anchors();void test_backrefs();void test_character_escapes();void test_assertion_escapes();void test_tricky_cases();void test_grep();void test_replace();void test_non_greedy_repeats();void test_non_marking_paren();void test_partial_match();void test_forward_lookahead_asserts();void test_fast_repeats();void test_fast_repeats2();void test_tricky_cases2();void test_independent_subs();void test_nosubs();void test_conditionals();void test_options();void test_options2();void test_en_locale();void test_emacs();void test_operators();void test_overloads();void test_unicode();#endif

⌨️ 快捷键说明

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