1//
2// shared_array nullptr test
3//
4// Copyright 2012, 2013 Peter Dimov
5//
6// Distributed under the Boost Software License, Version 1.0.
7// See accompanying file LICENSE_1_0.txt or copy at
8// http://www.boost.org/LICENSE_1_0.txt
9//
10
11#include <boost/shared_array.hpp>
12#include <boost/core/lightweight_test.hpp>
13#include <cstddef>
14#include <memory>
15
16#if !defined( BOOST_NO_CXX11_NULLPTR )
17
18struct X
19{
20 static int instances;
21
22 X()
23 {
24 ++instances;
25 }
26
27 ~X()
28 {
29 --instances;
30 }
31
32private:
33
34 X( X const & );
35 X & operator=( X const & );
36};
37
38int X::instances = 0;
39
40int main()
41{
42 {
43 boost::shared_array<int> p( nullptr );
44
45 BOOST_TEST( p.get() == 0 );
46 BOOST_TEST( p.use_count() == 0 );
47
48 BOOST_TEST( p == nullptr );
49 BOOST_TEST( nullptr == p );
50 BOOST_TEST( !( p != nullptr ) );
51 BOOST_TEST( !( nullptr != p ) );
52 }
53
54 {
55 boost::shared_array<int> p( new int[ 1 ] );
56
57 BOOST_TEST( p.get() != 0 );
58 BOOST_TEST( p.use_count() == 1 );
59
60 BOOST_TEST( p != nullptr );
61 BOOST_TEST( nullptr != p );
62 BOOST_TEST( !( p == nullptr ) );
63 BOOST_TEST( !( nullptr == p ) );
64
65 p = nullptr;
66
67 BOOST_TEST( p.get() == 0 );
68 BOOST_TEST( p.use_count() == 0 );
69
70 BOOST_TEST( p == nullptr );
71 BOOST_TEST( nullptr == p );
72 BOOST_TEST( !( p != nullptr ) );
73 BOOST_TEST( !( nullptr != p ) );
74 }
75
76 {
77 BOOST_TEST( X::instances == 0 );
78
79 boost::shared_array<X> p( new X[ 2 ] );
80 BOOST_TEST( X::instances == 2 );
81
82 BOOST_TEST( p.get() != 0 );
83 BOOST_TEST( p.use_count() == 1 );
84
85 BOOST_TEST( p != nullptr );
86 BOOST_TEST( nullptr != p );
87 BOOST_TEST( !( p == nullptr ) );
88 BOOST_TEST( !( nullptr == p ) );
89
90 p = nullptr;
91 BOOST_TEST( X::instances == 0 );
92
93 BOOST_TEST( p.get() == 0 );
94 BOOST_TEST( p.use_count() == 0 );
95
96 BOOST_TEST( p == nullptr );
97 BOOST_TEST( nullptr == p );
98 BOOST_TEST( !( p != nullptr ) );
99 BOOST_TEST( !( nullptr != p ) );
100 }
101
102 return boost::report_errors();
103}
104
105#else
106
107int main()
108{
109 return 0;
110}
111
112#endif
113

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