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/core/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 |
142 |