get_local_deleter_array_test.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. //
  2. // get_local_deleter_array_test2.cpp
  3. //
  4. // Copyright 2002, 2011, 2017 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/smart_ptr/local_shared_ptr.hpp>
  11. #include <boost/core/lightweight_test.hpp>
  12. struct deleter
  13. {
  14. int data;
  15. deleter(): data(0)
  16. {
  17. }
  18. void operator()(void *)
  19. {
  20. BOOST_TEST(data == 17041);
  21. }
  22. };
  23. struct deleter2
  24. {
  25. };
  26. struct X
  27. {
  28. };
  29. int main()
  30. {
  31. {
  32. boost::local_shared_ptr<X[]> p;
  33. BOOST_TEST(boost::get_deleter<void>(p) == 0);
  34. BOOST_TEST(boost::get_deleter<void const>(p) == 0);
  35. BOOST_TEST(boost::get_deleter<int>(p) == 0);
  36. BOOST_TEST(boost::get_deleter<int const>(p) == 0);
  37. BOOST_TEST(boost::get_deleter<X>(p) == 0);
  38. BOOST_TEST(boost::get_deleter<X const>(p) == 0);
  39. BOOST_TEST(boost::get_deleter<deleter>(p) == 0);
  40. BOOST_TEST(boost::get_deleter<deleter const>(p) == 0);
  41. BOOST_TEST(boost::get_deleter<deleter2>(p) == 0);
  42. BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0);
  43. }
  44. {
  45. boost::local_shared_ptr<X[1]> p;
  46. BOOST_TEST(boost::get_deleter<void>(p) == 0);
  47. BOOST_TEST(boost::get_deleter<void const>(p) == 0);
  48. BOOST_TEST(boost::get_deleter<int>(p) == 0);
  49. BOOST_TEST(boost::get_deleter<int const>(p) == 0);
  50. BOOST_TEST(boost::get_deleter<X>(p) == 0);
  51. BOOST_TEST(boost::get_deleter<X const>(p) == 0);
  52. BOOST_TEST(boost::get_deleter<deleter>(p) == 0);
  53. BOOST_TEST(boost::get_deleter<deleter const>(p) == 0);
  54. BOOST_TEST(boost::get_deleter<deleter2>(p) == 0);
  55. BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0);
  56. }
  57. {
  58. boost::local_shared_ptr<X[]> p(new X[1]);
  59. BOOST_TEST(boost::get_deleter<void>(p) == 0);
  60. BOOST_TEST(boost::get_deleter<void const>(p) == 0);
  61. BOOST_TEST(boost::get_deleter<int>(p) == 0);
  62. BOOST_TEST(boost::get_deleter<int const>(p) == 0);
  63. BOOST_TEST(boost::get_deleter<X>(p) == 0);
  64. BOOST_TEST(boost::get_deleter<X const>(p) == 0);
  65. BOOST_TEST(boost::get_deleter<deleter>(p) == 0);
  66. BOOST_TEST(boost::get_deleter<deleter const>(p) == 0);
  67. BOOST_TEST(boost::get_deleter<deleter2>(p) == 0);
  68. BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0);
  69. }
  70. {
  71. boost::local_shared_ptr<X[1]> p(new X[1]);
  72. BOOST_TEST(boost::get_deleter<void>(p) == 0);
  73. BOOST_TEST(boost::get_deleter<void const>(p) == 0);
  74. BOOST_TEST(boost::get_deleter<int>(p) == 0);
  75. BOOST_TEST(boost::get_deleter<int const>(p) == 0);
  76. BOOST_TEST(boost::get_deleter<X>(p) == 0);
  77. BOOST_TEST(boost::get_deleter<X const>(p) == 0);
  78. BOOST_TEST(boost::get_deleter<deleter>(p) == 0);
  79. BOOST_TEST(boost::get_deleter<deleter const>(p) == 0);
  80. BOOST_TEST(boost::get_deleter<deleter2>(p) == 0);
  81. BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0);
  82. }
  83. {
  84. X x[1];
  85. boost::local_shared_ptr<X[]> p(x, deleter());
  86. BOOST_TEST(boost::get_deleter<void>(p) == 0);
  87. BOOST_TEST(boost::get_deleter<void const>(p) == 0);
  88. BOOST_TEST(boost::get_deleter<int>(p) == 0);
  89. BOOST_TEST(boost::get_deleter<int const>(p) == 0);
  90. BOOST_TEST(boost::get_deleter<X>(p) == 0);
  91. BOOST_TEST(boost::get_deleter<X const>(p) == 0);
  92. BOOST_TEST(boost::get_deleter<deleter2>(p) == 0);
  93. BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0);
  94. deleter * q = boost::get_deleter<deleter>(p);
  95. BOOST_TEST(q != 0);
  96. BOOST_TEST(q->data == 0);
  97. q->data = 17041;
  98. deleter const * r = boost::get_deleter<deleter const>(p);
  99. BOOST_TEST(r == q);
  100. BOOST_TEST(r->data == 17041);
  101. }
  102. {
  103. X x[1];
  104. boost::local_shared_ptr<X[1]> p(x, deleter());
  105. BOOST_TEST(boost::get_deleter<void>(p) == 0);
  106. BOOST_TEST(boost::get_deleter<void const>(p) == 0);
  107. BOOST_TEST(boost::get_deleter<int>(p) == 0);
  108. BOOST_TEST(boost::get_deleter<int const>(p) == 0);
  109. BOOST_TEST(boost::get_deleter<X>(p) == 0);
  110. BOOST_TEST(boost::get_deleter<X const>(p) == 0);
  111. BOOST_TEST(boost::get_deleter<deleter2>(p) == 0);
  112. BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0);
  113. deleter * q = boost::get_deleter<deleter>(p);
  114. BOOST_TEST(q != 0);
  115. BOOST_TEST(q->data == 0);
  116. q->data = 17041;
  117. deleter const * r = boost::get_deleter<deleter const>(p);
  118. BOOST_TEST(r == q);
  119. BOOST_TEST(r->data == 17041);
  120. }
  121. return boost::report_errors();
  122. }