1 // thread_safe_signals library
2 // basic test for alternate threading models
4 // Copyright Frank Mori Hess 2008
5 // Use, modification and
6 // distribution is subject to the Boost Software License, Version
7 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
10 // For more information, see http://www.boost.org
12 #include <boost/signals2.hpp>
13 #define BOOST_TEST_MODULE threading_models_test
14 #include <boost/test/included/unit_test.hpp>
15 #include <boost/thread/mutex.hpp>
17 // combiner that returns the number of slots invoked
19 typedef unsigned result_type
;
20 template<typename InputIterator
>
21 unsigned operator()(InputIterator first
, InputIterator last
) const
24 for (; first
!= last
; ++first
)
31 catch(const boost::bad_weak_ptr
&)
42 template<typename signal_type
>
46 sig
.connect(typename
signal_type::slot_type(&myslot
));
47 BOOST_CHECK(sig() == 1);
48 sig
.disconnect(&myslot
);
49 BOOST_CHECK(sig() == 0);
52 class recursion_checking_dummy_mutex
56 recursion_checking_dummy_mutex(): recursion_count(0)
60 BOOST_REQUIRE(recursion_count
== 0);
71 BOOST_REQUIRE(recursion_count
== 0);
75 BOOST_AUTO_TEST_CASE(test_main
)
77 typedef boost::signals2::signal
<void (), slot_counter
, int, std::less
<int>, boost::function
<void ()>,
78 boost::function
<void (const boost::signals2::connection
&)>, recursion_checking_dummy_mutex
> sig0_rc_type
;
79 simple_test
<sig0_rc_type
>();
80 typedef boost::signals2::signal
<void (), slot_counter
, int, std::less
<int>, boost::function
<void ()>,
81 boost::function
<void (const boost::signals2::connection
&)>, boost::mutex
> sig0_mt_type
;
82 simple_test
<sig0_mt_type
>();
83 typedef boost::signals2::signal
<void (), slot_counter
, int, std::less
<int>, boost::function
<void ()>,
84 boost::function
<void (const boost::signals2::connection
&)>, boost::signals2::dummy_mutex
> sig0_st_type
;
85 simple_test
<sig0_st_type
>();