9#include <boost/test/unit_test.hpp>
14#include <unordered_set>
16BOOST_AUTO_TEST_SUITE(util_not_null_tests)
27 constexpr bool operator==(std::nullptr_t)
const {
return false; }
30 constexpr bool operator==(std::nullptr_t)
const {
return true; }
50 using Ptr = std::shared_ptr<int>;
54 static_assert(std::constructible_from<Ptr, int*>);
55 static_assert(!std::convertible_to<int*, Ptr>);
58 static_assert(std::constructible_from<NNPtr, Ptr>);
59 static_assert(!std::convertible_to<Ptr, NNPtr>);
62 using Ref = std::reference_wrapper<int>;
63 static_assert(std::constructible_from<Ref, int&>);
64 static_assert(std::convertible_to<int&, Ref>);
66 using UniqPtr = std::unique_ptr<int>;
70 static_assert(std::is_nothrow_constructible_v<NNPtr, NNPtr&>);
71 static_assert(std::is_nothrow_constructible_v<NNPtr, const NNPtr&>);
72 static_assert(std::is_nothrow_constructible_v<NNUniqPtr, NNUniqPtr&&>);
73 static_assert(!std::is_constructible_v<NNUniqPtr, NNUniqPtr&>);
74 static_assert(!std::is_constructible_v<NNUniqPtr, const NNUniqPtr&>);
75 static_assert(!std::is_constructible_v<NNPtr, const NNUniqPtr&>);
78 static_assert(!std::is_nothrow_constructible_v<NNPtr, NNUniqPtr&&>);
79 static_assert(std::is_constructible_v<NNPtr, NNUniqPtr&&>);
82 static_assert(std::convertible_to<NNUniqPtr&&, UniqPtr>);
83 static_assert(std::convertible_to<const NNPtr&, Ptr>);
84 static_assert(std::convertible_to<NNPtr&&, Ptr>);
87template <
class Target,
class Source>
89 typename std::bool_constant<([] {
96template <
class Target,
class Source>
103 constexpr NullPtr(
const SomePtr&) {}
104 constexpr bool operator==(std::nullptr_t)
const {
return true; }
107 constexpr explicit operator bool()
const {
return true; }
108 constexpr bool operator==(std::nullptr_t)
const {
return false; }
112#if !defined(_MSC_VER)
123 static_assert(!std::is_nothrow_constructible_v<util::NotNullSharedPtr<int>, std::unique_ptr<int>>);
126 HasReason{
"Internal bug detected: m_ptr != nullptr"});
146 using NoCopyPtr = std::unique_ptr<int>;
148 NoCopyPtr no_copy_ptr{std::make_unique<int>()};
150 NoCopyPtr
extract{std::move(no_copy)};
155 NoCopyPtr
extract{std::move(no_copy).get()};
163 virtual ~MyBase() =
default;
165 struct MyDerived :
public MyBase {
171 const bool same_ptr{q == p};
176 nn_base = std::move(nn_derived);
177 std::unique_ptr<MyBase> base_inner{std::move(nn_base)};
182 auto a{std::make_unique<int>()};
184 auto new_box{std::move(box)};
186 auto b{std::make_shared<int>()};
188 auto new_arc{std::move(arc)};
195 static_assert(std::is_nothrow_swappable_v<
decltype(box_a)>);
212 auto a{std::make_shared<int>(1)};
213 auto b{std::make_shared<int>(2)};
214 std::set<util::NotNullSharedPtr<int>> uniq{};
223 auto a{std::make_shared<int>(1)};
224 auto b{std::make_shared<int>(2)};
225 std::unordered_set<util::NotNullSharedPtr<int>> uniq{};
BOOST_CHECK_EXCEPTION predicates to check the specific validation error.
NotNull is intended to be used to denote that a smart pointer type can not hold a nullptr value.
BOOST_AUTO_TEST_SUITE_END()
BOOST_CHECK_EQUAL(headers.FindFirst("key"), "value")
BOOST_CHECK_EXCEPTION(HTTPHeaders{}.Read(reader), std::runtime_error, HasReason{"Empty HTTP header name"})
bool operator==(const CNetAddr &a, const CNetAddr &b)
#define BOOST_CHECK(expr)
#define extract(n)
Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits.
BOOST_AUTO_TEST_CASE(check_ctor)