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/detail/lightweight_test.hpp>
13 #include <cstddef>
14 #include <memory>
15 
16 #if !defined( BOOST_NO_CXX11_NULLPTR )
17 
18 struct X
19 {
20     static int instances;
21 
XX22     X()
23     {
24         ++instances;
25     }
26 
~XX27     ~X()
28     {
29         --instances;
30     }
31 
32 private:
33 
34     X( X const & );
35     X & operator=( X const & );
36 };
37 
38 int X::instances = 0;
39 
main()40 int 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 
main()107 int main()
108 {
109     return 0;
110 }
111 
112 #endif
113