// // const_ptr.t.h // pointers // // Created by Sam Jaffe on 1/5/17. // #pragma once #include #include "pointer/const_ptr.hpp" class const_ptr_TestSuite : public CxxTest::TestSuite { public: struct mock_object { bool is_const( ) { return false; } bool is_const( ) const { return true; } }; private: using ptr_t = std::shared_ptr; public: void test_non_const() { ptr_t p { new mock_object }; const_ptr< ptr_t > cp { p }; TS_ASSERT( cp->is_const() ); } void test_const() { ptr_t p { new mock_object }; const_ptr< ptr_t > const cp { p }; TS_ASSERT( cp->is_const() ); } void test_converts_from_cpp() { ptr_t p { new mock_object }; const_propogating_ptr< ptr_t > cpp { p }; const_ptr< ptr_t > cp { p }; TS_ASSERT_EQUALS( cp.get(), cpp.get() ); TS_ASSERT( ! cpp->is_const() ); TS_ASSERT( cp->is_const() ); } void test_do_not_own() const { bool has_delete{false}; struct test_t { ~test_t() { _r = true; } bool & _r; }; test_t * test_struct = new test_t{has_delete}; const_ptr{test_struct}; TS_ASSERT_EQUALS(has_delete, false); delete test_struct; TS_ASSERT_EQUALS(has_delete, true); } };