Toolbox
snapshot
The Reactive C++ Toolbox
Loading...
Searching...
No Matches
toolbox
io
Disposer.ut.cpp
Go to the documentation of this file.
1
// The Reactive C++ Toolbox.
2
// Copyright (C) 2013-2019 Swirly Cloud Limited
3
// Copyright (C) 2021 Reactive Markets Limited
4
//
5
// Licensed under the Apache License, Version 2.0 (the "License");
6
// you may not use this file except in compliance with the License.
7
// You may obtain a copy of the License at
8
//
9
// http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing, software
12
// distributed under the License is distributed on an "AS IS" BASIS,
13
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
// See the License for the specific language governing permissions and
15
// limitations under the License.
16
17
#include "
Disposer.hpp
"
18
19
#include <boost/test/unit_test.hpp>
20
21
using namespace
std
;
22
using namespace
toolbox
;
23
24
namespace
{
25
struct
Disposer :
BasicDisposer
<Disposer> {
26
using
BasicDisposer
<Disposer>::is_locked;
27
using
BasicDisposer
<Disposer>::lock_this;
28
void
dispose_now(
CyclTime
now)
noexcept
29
{
30
// Ensure that dispose_now can safely call dispose.
31
// This could happen if dispose_now invoked a callback.
32
dispose(now);
33
++disposed;
34
}
35
int
disposed{0};
36
};
37
}
// namespace
38
39
BOOST_AUTO_TEST_SUITE
(
DisposerSuite
)
40
41
BOOST_AUTO_TEST_CASE
(
DisposerCase
)
42
{
43
const
auto
now = CyclTime::now();
44
Disposer
d
;
45
BOOST_CHECK
(!
d
.is_locked());
46
BOOST_CHECK_EQUAL
(
d
.disposed, 0);
47
{
48
auto
lock
=
d
.lock_this(now);
49
BOOST_CHECK
(
d
.is_locked());
50
}
51
BOOST_CHECK
(!
d
.is_locked());
52
BOOST_CHECK_EQUAL
(
d
.disposed, 0);
53
{
54
auto
outer_lock
=
d
.lock_this(now);
55
BOOST_CHECK
(
d
.is_locked());
56
{
57
auto
inner_lock
=
d
.lock_this(now);
58
d
.dispose(now);
59
BOOST_CHECK
(
d
.is_locked());
60
BOOST_CHECK_EQUAL
(
d
.disposed, 0);
61
}
62
// And again.
63
d
.dispose(now);
64
BOOST_CHECK
(
d
.is_locked());
65
BOOST_CHECK_EQUAL
(
d
.disposed, 0);
66
}
67
BOOST_CHECK_EQUAL
(
d
.disposed, 1);
68
}
69
70
BOOST_AUTO_TEST_SUITE_END
()
Disposer.hpp
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(DisposerCase)
Definition
Disposer.ut.cpp:41
BOOST_CHECK_EQUAL
BOOST_CHECK_EQUAL(v.size(), 10U)
toolbox::BasicDisposer
Definition
Disposer.hpp:29
toolbox::CyclTime
Definition
Time.hpp:126
std
STL namespace.
toolbox::util::bind
constexpr auto bind() noexcept
Definition
Slot.hpp:92
toolbox
Definition
Benchmark.cpp:26
BOOST_CHECK
BOOST_CHECK(isnan(stod(""sv, numeric_limits< double >::quiet_NaN())))
Generated by
1.9.8