]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/signals2/test/threading_models_test.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / signals2 / test / threading_models_test.cpp
1 // thread_safe_signals library
2 // basic test for alternate threading models
3
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)
9
10 // For more information, see http://www.boost.org
11
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>
16
17 // combiner that returns the number of slots invoked
18 struct slot_counter {
19 typedef unsigned result_type;
20 template<typename InputIterator>
21 unsigned operator()(InputIterator first, InputIterator last) const
22 {
23 unsigned count = 0;
24 for (; first != last; ++first)
25 {
26 try
27 {
28 *first;
29 ++count;
30 }
31 catch(const boost::bad_weak_ptr &)
32 {}
33 }
34 return count;
35 }
36 };
37
38 void myslot()
39 {
40 }
41
42 template<typename signal_type>
43 void simple_test()
44 {
45 signal_type sig;
46 sig.connect(typename signal_type::slot_type(&myslot));
47 BOOST_CHECK(sig() == 1);
48 sig.disconnect(&myslot);
49 BOOST_CHECK(sig() == 0);
50 }
51
52 class recursion_checking_dummy_mutex
53 {
54 int recursion_count;
55 public:
56 recursion_checking_dummy_mutex(): recursion_count(0)
57 {}
58 void lock()
59 {
60 BOOST_REQUIRE(recursion_count == 0);
61 ++recursion_count;
62 }
63 bool try_lock()
64 {
65 lock();
66 return true;
67 }
68 void unlock()
69 {
70 --recursion_count;
71 BOOST_REQUIRE(recursion_count == 0);
72 }
73 };
74
75 BOOST_AUTO_TEST_CASE(test_main)
76 {
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>();
86 }