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
19struct X
20{
21 static int instances;
22
23 X()
24 {
25 ++instances;
26 }
27
28 ~X()
29 {
30 --instances;
31 }
32
33private:
34
35 X( X const & );
36 X & operator=( X const & );
37};
38
39int X::instances = 0;
40
41void f( boost::detail::sp_nullptr_t )
42{
43}
44
45int 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
136int main()
137{
138 return 0;
139}
140
141#endif
142

source code of boost/libs/smart_ptr/test/sp_nullptr_test.cpp