refcount_ptr_test.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. //Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
  2. //Distributed under the Boost Software License, Version 1.0. (See accompanying
  3. //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  4. #include <boost/exception/exception.hpp>
  5. #include <boost/detail/lightweight_test.hpp>
  6. struct
  7. test_type
  8. {
  9. test_type( int & count ):
  10. count_(count)
  11. {
  12. BOOST_TEST(count_==42);
  13. count_=0;
  14. }
  15. ~test_type()
  16. {
  17. BOOST_TEST(!count_);
  18. count_=42;
  19. }
  20. void
  21. add_ref()
  22. {
  23. ++count_;
  24. }
  25. bool
  26. release()
  27. {
  28. if( --count_ )
  29. return false;
  30. else
  31. {
  32. delete this;
  33. return true;
  34. }
  35. }
  36. private:
  37. test_type( test_type const & );
  38. test_type & operator=( test_type const & );
  39. int & count_;
  40. };
  41. int
  42. main()
  43. {
  44. using boost::exception_detail::refcount_ptr;
  45. {
  46. refcount_ptr<test_type> x;
  47. BOOST_TEST(!x.get());
  48. }
  49. {
  50. int count=42;
  51. test_type * a=new test_type(count);
  52. BOOST_TEST(!count);
  53. {
  54. refcount_ptr<test_type> p;
  55. BOOST_TEST(0==count);
  56. p.adopt(a);
  57. BOOST_TEST(p.get()==a);
  58. BOOST_TEST(1==count);
  59. {
  60. refcount_ptr<test_type> q;
  61. q.adopt(p.get());
  62. BOOST_TEST(q.get()==a);
  63. BOOST_TEST(2==count);
  64. {
  65. refcount_ptr<test_type> t(p);
  66. BOOST_TEST(t.get()==a);
  67. BOOST_TEST(3==count);
  68. {
  69. refcount_ptr<test_type> n;
  70. n=t;
  71. BOOST_TEST(n.get()==a);
  72. BOOST_TEST(4==count);
  73. int cb=42;
  74. test_type * b=new test_type(cb);
  75. BOOST_TEST(0==cb);
  76. n.adopt(b);
  77. BOOST_TEST(1==cb);
  78. BOOST_TEST(n.get()==b);
  79. BOOST_TEST(3==count);
  80. n.adopt(0);
  81. BOOST_TEST(42==cb);
  82. }
  83. BOOST_TEST(t.get()==a);
  84. BOOST_TEST(3==count);
  85. }
  86. BOOST_TEST(q.get()==a);
  87. BOOST_TEST(2==count);
  88. }
  89. BOOST_TEST(p.get()==a);
  90. BOOST_TEST(1==count);
  91. }
  92. BOOST_TEST(42==count);
  93. }
  94. return boost::report_errors();
  95. }