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()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 main()107int main() 108 { 109 return 0; 110 } 111 112 #endif 113