const_propogating_ptr.t.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //
  2. // const_propogating_ptr.t.h
  3. // pointers
  4. //
  5. // Created by Sam Jaffe on 1/5/17.
  6. //
  7. #pragma once
  8. #include <cxxtest/TestSuite.h>
  9. #include "const_propogating_ptr.hpp"
  10. class const_propogating_ptr_TestSuite : public CxxTest::TestSuite {
  11. public:
  12. struct mock_object {
  13. bool is_const( ) { return false; }
  14. bool is_const( ) const { return true; }
  15. };
  16. private:
  17. using ptr_t = std::shared_ptr<mock_object>;
  18. public:
  19. void test_non_const() {
  20. ptr_t p { new mock_object };
  21. const_propogating_ptr< ptr_t > cp { p };
  22. TS_ASSERT( ! cp->is_const() );
  23. }
  24. void test_const() {
  25. ptr_t p { new mock_object };
  26. const_propogating_ptr< ptr_t > const cp { p };
  27. TS_ASSERT( cp->is_const() );
  28. }
  29. void test_do_not_own() const {
  30. bool has_delete{false};
  31. struct test_t {
  32. ~test_t() { _r = true; }
  33. bool & _r;
  34. };
  35. test_t * test_struct = new test_t{has_delete};
  36. const_propogating_ptr<test_t *>{test_struct};
  37. TS_ASSERT_EQUALS(has_delete, false);
  38. delete test_struct;
  39. TS_ASSERT_EQUALS(has_delete, true);
  40. }
  41. };