// // copy_ptr.t.h // pointers // // Created by Sam Jaffe on 1/5/17. // #pragma once #include #include "copy_ptr.hpp" class copy_ptr_TestSuite : public CxxTest::TestSuite { private: struct copy_me {}; class base { public: virtual ~base() {} virtual base* clone() const = 0; virtual int id() const = 0; }; class derived_0 : public base { public: static const constexpr int ID = 0; virtual base * clone() const override { return new derived_0; } virtual int id() const override { return ID; } }; class derived_1 : public base { public: static const constexpr int ID = 1; virtual base * clone() const override { return new derived_1; } virtual int id() const override { return ID; } }; public: void test_copy_new_obj() { copy_ptr c1 { new copy_me }; copy_ptr c2 { c1 }; TS_ASSERT_DIFFERS( c1.get(), c2.get() ); } void test_clone_polymorpic_object() { using ptr_t = clone_ptr; ptr_t c0 { new derived_0 }; TS_ASSERT_EQUALS( ptr_t( c0 )->id(), derived_0::ID); ptr_t c1 { new derived_1 }; TS_ASSERT_EQUALS( ptr_t( c1 )->id(), derived_1::ID); } };