small_obj.cpp 947 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #define BOOST_TEST_DYN_LINK
  2. #define BOOST_TEST_MAIN // in only one cpp file
  3. #include <boost/test/unit_test.hpp>
  4. #include "core/small_obj.hpp"
  5. using namespace sophiar;
  6. BOOST_AUTO_TEST_CASE(test_small_obj) {
  7. struct test_obj : public small_obj<test_obj> {
  8. explicit test_obj(int &_p) : probe(_p) {
  9. probe = 1;
  10. }
  11. ~test_obj() {
  12. probe = 2;
  13. }
  14. int &probe;
  15. };
  16. int my_probe = 0;
  17. {
  18. auto obj = test_obj::new_instance(my_probe);
  19. BOOST_TEST(my_probe == 1);
  20. }
  21. BOOST_TEST(my_probe == 2);
  22. my_probe = 0;
  23. {
  24. test_obj::pointer obj_2;
  25. {
  26. auto obj = test_obj::new_instance(my_probe);
  27. obj_2 = obj;
  28. BOOST_TEST(my_probe == 1);
  29. BOOST_TEST(obj_2->ref_count == 2);
  30. }
  31. BOOST_TEST(my_probe == 1);
  32. BOOST_TEST(obj_2->ref_count == 1);
  33. }
  34. BOOST_TEST(my_probe == 2);
  35. }