X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Ftest_boost_threads.cpp;h=bb51287e50d4b02745b0c470e023db01352ebf45;hb=586d78659d671683f33ec55f4a7d32b28e345ccd;hp=8a26cab98212e70766b02f5d734f6d09aef013dd;hpb=c90fa1d9d80ba80198953b34c2e5a3134d1b5402;p=metaproxy-moved-to-github.git diff --git a/src/test_boost_threads.cpp b/src/test_boost_threads.cpp index 8a26cab..bb51287 100644 --- a/src/test_boost_threads.cpp +++ b/src/test_boost_threads.cpp @@ -1,60 +1,117 @@ +/* This file is part of Metaproxy. + Copyright (C) Index Data +Metaproxy is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Metaproxy is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "config.hpp" #include #include -#include -boost::mutex io_mutex; // The iostreams are not guaranteed to be thread-safe! +#define BOOST_AUTO_TEST_MAIN +#define BOOST_TEST_DYN_LINK +#include + +#include +#include 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() +class worker { +public: + void operator() (void) { + c.increment(); + } +}; + +#define USE_GROUP 1 + + +BOOST_AUTO_TEST_CASE( thread_group ) { - int i = c.increment(); - boost::mutex::scoped_lock scoped_lock(io_mutex); - std::cout << "count == " << i << std::endl; -} + 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); +} -int main(int, char*[]) +BOOST_AUTO_TEST_CASE( thread_list ) { - try - { - const int num_threads = 4; - boost::thread_group thrds; - for (int i=0; i < num_threads; ++i) - thrds.create_thread(&change_count); - - thrds.join_all(); - - } - catch (std::exception &e) - { - std::cout << e.what() << "\n"; - exit(1); - } - exit(0); + 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; + } + + } + catch (...) + { + BOOST_CHECK(false); + } + BOOST_CHECK(c.increment() == 10); } + + /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +