sp_nullptr_test.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. #include <boost/shared_ptr.hpp>
  11. #include <boost/smart_ptr/detail/sp_nullptr_t.hpp>
  12. #include <boost/detail/lightweight_test.hpp>
  13. #include <cstddef>
  14. #include <memory>
  15. #if !defined( BOOST_NO_CXX11_NULLPTR )
  16. struct X
  17. {
  18. static int instances;
  19. X()
  20. {
  21. ++instances;
  22. }
  23. ~X()
  24. {
  25. --instances;
  26. }
  27. private:
  28. X( X const & );
  29. X & operator=( X const & );
  30. };
  31. int X::instances = 0;
  32. void f( boost::detail::sp_nullptr_t )
  33. {
  34. }
  35. int main()
  36. {
  37. {
  38. boost::shared_ptr<void> p( nullptr );
  39. BOOST_TEST( p.get() == 0 );
  40. BOOST_TEST( p.use_count() == 0 );
  41. BOOST_TEST( p == nullptr );
  42. BOOST_TEST( nullptr == p );
  43. BOOST_TEST( !( p != nullptr ) );
  44. BOOST_TEST( !( nullptr != p ) );
  45. }
  46. {
  47. boost::shared_ptr<int> p( nullptr, f );
  48. BOOST_TEST( p.get() == 0 );
  49. BOOST_TEST( p.use_count() == 1 );
  50. BOOST_TEST( p == nullptr );
  51. BOOST_TEST( nullptr == p );
  52. BOOST_TEST( !( p != nullptr ) );
  53. BOOST_TEST( !( nullptr != p ) );
  54. }
  55. {
  56. boost::shared_ptr<int> p( nullptr, f, std::allocator<int>() );
  57. BOOST_TEST( p.get() == 0 );
  58. BOOST_TEST( p.use_count() == 1 );
  59. BOOST_TEST( p == nullptr );
  60. BOOST_TEST( nullptr == p );
  61. BOOST_TEST( !( p != nullptr ) );
  62. BOOST_TEST( !( nullptr != p ) );
  63. }
  64. {
  65. boost::shared_ptr<int> p( new int );
  66. BOOST_TEST( p.get() != 0 );
  67. BOOST_TEST( p.use_count() == 1 );
  68. BOOST_TEST( p != nullptr );
  69. BOOST_TEST( nullptr != p );
  70. BOOST_TEST( !( p == nullptr ) );
  71. BOOST_TEST( !( nullptr == p ) );
  72. p = nullptr;
  73. BOOST_TEST( p.get() == 0 );
  74. BOOST_TEST( p.use_count() == 0 );
  75. BOOST_TEST( p == nullptr );
  76. BOOST_TEST( nullptr == p );
  77. BOOST_TEST( !( p != nullptr ) );
  78. BOOST_TEST( !( nullptr != p ) );
  79. }
  80. {
  81. BOOST_TEST( X::instances == 0 );
  82. boost::shared_ptr<X> p( new X );
  83. BOOST_TEST( X::instances == 1 );
  84. BOOST_TEST( p.get() != 0 );
  85. BOOST_TEST( p.use_count() == 1 );
  86. BOOST_TEST( p != nullptr );
  87. BOOST_TEST( nullptr != p );
  88. BOOST_TEST( !( p == nullptr ) );
  89. BOOST_TEST( !( nullptr == p ) );
  90. p = nullptr;
  91. BOOST_TEST( X::instances == 0 );
  92. BOOST_TEST( p.get() == 0 );
  93. BOOST_TEST( p.use_count() == 0 );
  94. BOOST_TEST( p == nullptr );
  95. BOOST_TEST( nullptr == p );
  96. BOOST_TEST( !( p != nullptr ) );
  97. BOOST_TEST( !( nullptr != p ) );
  98. }
  99. return boost::report_errors();
  100. }
  101. #else
  102. int main()
  103. {
  104. return 0;
  105. }
  106. #endif