sa_nullptr_test.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. #include <boost/shared_array.hpp>
  11. #include <boost/detail/lightweight_test.hpp>
  12. #include <cstddef>
  13. #include <memory>
  14. #if !defined( BOOST_NO_CXX11_NULLPTR )
  15. struct X
  16. {
  17. static int instances;
  18. X()
  19. {
  20. ++instances;
  21. }
  22. ~X()
  23. {
  24. --instances;
  25. }
  26. private:
  27. X( X const & );
  28. X & operator=( X const & );
  29. };
  30. int X::instances = 0;
  31. int main()
  32. {
  33. {
  34. boost::shared_array<int> p( nullptr );
  35. BOOST_TEST( p.get() == 0 );
  36. BOOST_TEST( p.use_count() == 0 );
  37. BOOST_TEST( p == nullptr );
  38. BOOST_TEST( nullptr == p );
  39. BOOST_TEST( !( p != nullptr ) );
  40. BOOST_TEST( !( nullptr != p ) );
  41. }
  42. {
  43. boost::shared_array<int> p( new int[ 1 ] );
  44. BOOST_TEST( p.get() != 0 );
  45. BOOST_TEST( p.use_count() == 1 );
  46. BOOST_TEST( p != nullptr );
  47. BOOST_TEST( nullptr != p );
  48. BOOST_TEST( !( p == nullptr ) );
  49. BOOST_TEST( !( nullptr == p ) );
  50. p = nullptr;
  51. BOOST_TEST( p.get() == 0 );
  52. BOOST_TEST( p.use_count() == 0 );
  53. BOOST_TEST( p == nullptr );
  54. BOOST_TEST( nullptr == p );
  55. BOOST_TEST( !( p != nullptr ) );
  56. BOOST_TEST( !( nullptr != p ) );
  57. }
  58. {
  59. BOOST_TEST( X::instances == 0 );
  60. boost::shared_array<X> p( new X[ 2 ] );
  61. BOOST_TEST( X::instances == 2 );
  62. BOOST_TEST( p.get() != 0 );
  63. BOOST_TEST( p.use_count() == 1 );
  64. BOOST_TEST( p != nullptr );
  65. BOOST_TEST( nullptr != p );
  66. BOOST_TEST( !( p == nullptr ) );
  67. BOOST_TEST( !( nullptr == p ) );
  68. p = nullptr;
  69. BOOST_TEST( X::instances == 0 );
  70. BOOST_TEST( p.get() == 0 );
  71. BOOST_TEST( p.use_count() == 0 );
  72. BOOST_TEST( p == nullptr );
  73. BOOST_TEST( nullptr == p );
  74. BOOST_TEST( !( p != nullptr ) );
  75. BOOST_TEST( !( nullptr != p ) );
  76. }
  77. return boost::report_errors();
  78. }
  79. #else
  80. int main()
  81. {
  82. return 0;
  83. }
  84. #endif