-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathblock_emit_test.cpp
49 lines (43 loc) · 1.69 KB
/
block_emit_test.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//Copyright (c) 2015-2021 Emil Dotchevski and Reverge Studios, Inc.
//Distributed under 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)
#include <boost/synapse/block.hpp>
#include <boost/synapse/blocker.hpp>
#include <boost/synapse/connect.hpp>
#include "boost/core/lightweight_test.hpp"
namespace synapse=boost::synapse;
namespace
{
template <class Signal>
bool emitter_blocked( void const * e )
{
std::shared_ptr<synapse::synapse_detail::thread_local_signal_data> const & tlsd=synapse::synapse_detail::get_thread_local_signal_data<Signal>(false);
return tlsd && tlsd->emitter_blocked_(*tlsd,e);
}
typedef struct my_signal_(*my_signal)();
}
int main( int argc, char const * argv[] )
{
int e1, e2;
BOOST_TEST(!emitter_blocked<my_signal>(&e1));
BOOST_TEST(!emitter_blocked<my_signal>(&e2));
std::shared_ptr<synapse::blocker> b1=synapse::block<my_signal>(&e1);
BOOST_TEST(emitter_blocked<my_signal>(&e1));
BOOST_TEST(!emitter_blocked<my_signal>(&e2));
std::shared_ptr<synapse::blocker> b2=synapse::block<my_signal>(&e2);
BOOST_TEST(emitter_blocked<my_signal>(&e1));
BOOST_TEST(emitter_blocked<my_signal>(&e2));
int count=0;
std::shared_ptr<synapse::connection> c=synapse::connect<my_signal>(&e1,[&count]() { ++count; } );
BOOST_TEST_EQ(synapse::emit<my_signal>(&e1), 0);
BOOST_TEST_EQ(count, 0);
b1.reset();
BOOST_TEST(!emitter_blocked<my_signal>(&e1));
BOOST_TEST(emitter_blocked<my_signal>(&e2));
BOOST_TEST_EQ(synapse::emit<my_signal>(&e1), 1);
BOOST_TEST_EQ(count, 1);
b2.reset();
BOOST_TEST(!emitter_blocked<my_signal>(&e1));
BOOST_TEST(!emitter_blocked<my_signal>(&e2));
return boost::report_errors();
}