From 1d9811aca2c8dd514ba28f8e96a44fd2947a48f3 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 7 Oct 2005 13:56:02 +0000 Subject: [PATCH] Add code to test join of single threads or groups --- src/Makefile.am | 3 +- src/test_boost_threads.cpp | 118 ++++++++++++++++++++++---------------------- 2 files changed, 61 insertions(+), 60 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 8e09b58..269edad 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,4 @@ -## $Id: Makefile.am,v 1.8 2005-10-07 11:42:04 adam Exp $ +## $Id: Makefile.am,v 1.9 2005-10-07 13:56:02 adam Exp $ AM_CXXFLAGS = $(YAZPPINC) $(XSLT_CFLAGS) @@ -29,4 +29,5 @@ p2_SOURCES=p2_frontend.cpp p2_msg.cpp p2.cpp p2_frontend.h \ LDADD= $(YAZPPLALIB) $(XSLT_LIBS) test_filter1_LDADD = $(LDADD) -lboost_unit_test_framework +test_boost_threads_LDADD = $(LDADD) -lboost_unit_test_framework diff --git a/src/test_boost_threads.cpp b/src/test_boost_threads.cpp index 08af856..850aaf0 100644 --- a/src/test_boost_threads.cpp +++ b/src/test_boost_threads.cpp @@ -1,92 +1,92 @@ #include #include + +#define BOOST_AUTO_TEST_MAIN +#include + #include #include -boost::mutex io_mutex; // The iostreams are not guaranteed to be thread-safe! - class counter { public: counter() : count(0) { } - int increment() { - boost::mutex::scoped_lock scoped_lock(mutex); - return ++count; - } - - private: - boost::mutex mutex; - int count; + int increment() { + boost::mutex::scoped_lock scoped_lock(mutex); + return ++count; + } + +private: + boost::mutex mutex; + int count; }; counter c; -void change_count() -{ - int i = c.increment(); - boost::mutex::scoped_lock scoped_lock(io_mutex); - std::cout << "count == " << i << std::endl; -} - - class worker { public: void operator() (void) { - int i = c.increment(); - - i = c.increment(); - - i = c.increment(); - boost::mutex::scoped_lock scoped_lock(io_mutex); - std::cout << "count == " << i << std::endl; + c.increment(); } - virtual ~worker() { std::cout << "destroyed\n"; } }; +#define USE_GROUP 1 -int main(int, char*[]) +BOOST_AUTO_TEST_CASE( thread_group ) { - try - { - const int num_threads = 4; - boost::thread_group thrds; - - std::list thread_list; - - for (int i=0; i < num_threads; ++i) - { - // thrds.create_thread(&change_count); - worker *w = new worker; + try + { + const int num_threads = 4; + boost::thread_group thrds; + + for (int i=0; i < num_threads; ++i) + { + worker w; + thrds.add_thread(new boost::thread(w)); + } + thrds.join_all(); + } + catch (...) + { + BOOST_CHECK(false); + } + BOOST_CHECK(c.increment() == 5); +} - boost::thread *thr = new boost::thread(*w); - thrds.add_thread(thr); +BOOST_AUTO_TEST_CASE( thread_list ) +{ + try + { + const int num_threads = 4; + std::list thread_list; + + for (int i=0; i < num_threads; ++i) + { + worker w; + thread_list.push_back(new boost::thread(w)); + } + std::list::iterator it; + for (it = thread_list.begin(); it != thread_list.end(); it++) + { + (*it)->join(); + delete *it; + } - thread_list.push_back(thr); - } - - thrds.join_all(); -#if 0 - std::list::iterator it; - for (it = thread_list.begin(); it != thread_list.end(); it++) - { - delete *it; - *it = 0; - } -#endif - } - catch (std::exception &e) - { - std::cout << e.what() << "\n"; - exit(1); - } - exit(0); + } + catch (...) + { + BOOST_CHECK(false); + } + BOOST_CHECK(c.increment() == 10); } + + /* * Local variables: * c-basic-offset: 4 -- 1.7.10.4