]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/sp_nullptr_test.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / smart_ptr / test / sp_nullptr_test.cpp
1 //
2 // sp_nullptr_test.cpp
3 //
4 // Copyright 2012 Peter Dimov
5 //
6 // Distributed under the Boost Software License, Version 1.0. (See
7 // accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
9 //
10
11 #include <boost/shared_ptr.hpp>
12 #include <boost/smart_ptr/detail/sp_nullptr_t.hpp>
13 #include <boost/detail/lightweight_test.hpp>
14 #include <cstddef>
15 #include <memory>
16
17 #if !defined( BOOST_NO_CXX11_NULLPTR )
18
19 struct X
20 {
21 static int instances;
22
23 X()
24 {
25 ++instances;
26 }
27
28 ~X()
29 {
30 --instances;
31 }
32
33 private:
34
35 X( X const & );
36 X & operator=( X const & );
37 };
38
39 int X::instances = 0;
40
41 void f( boost::detail::sp_nullptr_t )
42 {
43 }
44
45 int main()
46 {
47 {
48 boost::shared_ptr<void> p( nullptr );
49
50 BOOST_TEST( p.get() == 0 );
51 BOOST_TEST( p.use_count() == 0 );
52
53 BOOST_TEST( p == nullptr );
54 BOOST_TEST( nullptr == p );
55 BOOST_TEST( !( p != nullptr ) );
56 BOOST_TEST( !( nullptr != p ) );
57 }
58
59 {
60 boost::shared_ptr<int> p( nullptr, f );
61
62 BOOST_TEST( p.get() == 0 );
63 BOOST_TEST( p.use_count() == 1 );
64
65 BOOST_TEST( p == nullptr );
66 BOOST_TEST( nullptr == p );
67 BOOST_TEST( !( p != nullptr ) );
68 BOOST_TEST( !( nullptr != p ) );
69 }
70
71 {
72 boost::shared_ptr<int> p( nullptr, f, std::allocator<int>() );
73
74 BOOST_TEST( p.get() == 0 );
75 BOOST_TEST( p.use_count() == 1 );
76
77 BOOST_TEST( p == nullptr );
78 BOOST_TEST( nullptr == p );
79 BOOST_TEST( !( p != nullptr ) );
80 BOOST_TEST( !( nullptr != p ) );
81 }
82
83 {
84 boost::shared_ptr<int> p( new int );
85
86 BOOST_TEST( p.get() != 0 );
87 BOOST_TEST( p.use_count() == 1 );
88
89 BOOST_TEST( p != nullptr );
90 BOOST_TEST( nullptr != p );
91 BOOST_TEST( !( p == nullptr ) );
92 BOOST_TEST( !( nullptr == p ) );
93
94 p = nullptr;
95
96 BOOST_TEST( p.get() == 0 );
97 BOOST_TEST( p.use_count() == 0 );
98
99 BOOST_TEST( p == nullptr );
100 BOOST_TEST( nullptr == p );
101 BOOST_TEST( !( p != nullptr ) );
102 BOOST_TEST( !( nullptr != p ) );
103 }
104
105 {
106 BOOST_TEST( X::instances == 0 );
107
108 boost::shared_ptr<X> p( new X );
109 BOOST_TEST( X::instances == 1 );
110
111 BOOST_TEST( p.get() != 0 );
112 BOOST_TEST( p.use_count() == 1 );
113
114 BOOST_TEST( p != nullptr );
115 BOOST_TEST( nullptr != p );
116 BOOST_TEST( !( p == nullptr ) );
117 BOOST_TEST( !( nullptr == p ) );
118
119 p = nullptr;
120 BOOST_TEST( X::instances == 0 );
121
122 BOOST_TEST( p.get() == 0 );
123 BOOST_TEST( p.use_count() == 0 );
124
125 BOOST_TEST( p == nullptr );
126 BOOST_TEST( nullptr == p );
127 BOOST_TEST( !( p != nullptr ) );
128 BOOST_TEST( !( nullptr != p ) );
129 }
130
131 return boost::report_errors();
132 }
133
134 #else
135
136 int main()
137 {
138 return 0;
139 }
140
141 #endif