main.cpp

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

CPP
199
字号
/* * * 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         main.cpp  *   VERSION      see <boost/version.hpp>  *   DESCRIPTION: entry point for test program.  */#include "test.hpp"#include "test_locale.hpp"#include <stdarg.h>#ifdef TEST_THREADS#include <list>#include <boost/thread.hpp>#include <boost/thread/tss.hpp>#include <boost/shared_ptr.hpp>#include <boost/array.hpp>int* get_array_data();#endifint error_count = 0;void run_tests(){   basic_tests();   test_simple_repeats();   test_alt();   test_sets();   test_sets2();   test_anchors();   test_backrefs();   test_character_escapes();   test_assertion_escapes();   test_tricky_cases();   test_grep();   test_replace();   test_non_greedy_repeats();   test_non_marking_paren();   test_partial_match();   test_forward_lookahead_asserts();   test_fast_repeats();   test_fast_repeats2();   test_independent_subs();   test_nosubs();   test_conditionals();   test_options();   test_options2();#ifndef TEST_THREADS   test_en_locale();#endif   test_emacs();   test_operators();   test_overloads();   test_unicode();}int cpp_main(int /*argc*/, char * /*argv*/[]){#ifdef TEST_THREADS   try{      get_array_data();  // initialises data.   }   catch(const std::exception& e)   {      std::cerr << "TSS Initialisation failed with message: " << e.what() << std::endl;      return -1;   }   std::list<boost::shared_ptr<boost::thread> > threads;   for(int i = 0; i < 5; ++i)   {      try{         threads.push_back(boost::shared_ptr<boost::thread>(new boost::thread(&run_tests)));      }      catch(const std::exception& e)      {         std::cerr << "<note>Thread creation failed with message: " << e.what() << "</note>" << std::endl;      }   }   std::list<boost::shared_ptr<boost::thread> >::const_iterator a(threads.begin()), b(threads.end());   while(a != b)   {      (*a)->join();      ++a;   }#else   run_tests();#endif   return error_count;}#ifdef TEST_THREADSint* get_array_data(){   static boost::thread_specific_ptr<boost::array<int, 200> > tp;   if(tp.get() == 0)      tp.reset(new boost::array<int, 200>);   return tp.get()->data();}#endifconst int* make_array(int first, ...){   //   // this function takes a variable number of arguments   // and packs them into an array that we can pass through   // our testing macros (ideally we would use an array literal   // but these can't apparently be used as macro arguments).   //#ifdef TEST_THREADS   int* data = get_array_data();#else   static int data[200];#endif   va_list ap;   va_start(ap, first);   //   // keep packing args, until we get two successive -2 values:   //   int terminator_count;   int next_position = 1;   data[0] = first;   if(first == -2)      terminator_count = 1;   else      terminator_count = 0;   while(terminator_count < 2)   {      data[next_position] = va_arg(ap, int);      if(data[next_position] == -2)         ++terminator_count;      else         terminator_count = 0;      ++next_position;   }   va_end(ap);   return data;}#ifdef BOOST_NO_EXCEPTIONSnamespace boost{void throw_exception(std::exception const & e){   std::abort();}}#endifvoid test(const char& c, const test_regex_replace_tag& tag){   do_test(c, tag);}void test(const char& c, const test_regex_search_tag& tag){   do_test(c, tag);}void test(const char& c, const test_invalid_regex_tag& tag){   do_test(c, tag);}#ifndef BOOST_NO_WREGEXvoid test(const wchar_t& c, const test_regex_replace_tag& tag){   do_test(c, tag);}void test(const wchar_t& c, const test_regex_search_tag& tag){   do_test(c, tag);}void test(const wchar_t& c, const test_invalid_regex_tag& tag){   do_test(c, tag);}#endif#include <boost/test/included/prg_exec_monitor.hpp>

⌨️ 快捷键说明

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