/** @file * @author Edouard DUPIN * @copyright 2016, Edouard DUPIN, all right reserved * @license MPL v2.0 (see license file) */ #include #include #include "main.hpp" namespace testEnableCast { class testClass { public: testClass() { EMEMORY_INFO("create TestClass"); } virtual ~testClass() { EMEMORY_INFO("delete TestClass"); } }; class testClassChild : public testEnableCast::testClass { public: testClassChild() { EMEMORY_INFO("create TestClassChild"); } ~testClassChild() { EMEMORY_INFO("delete TestClassChild"); } }; } TEST(TestEnableCast, base) { ememory::SharedPtr dataChild = ememory::makeShared(); EXPECT_EQ(dataChild.useCount(), 1); ememory::SharedPtr data = dataChild; EXPECT_EQ(dataChild.useCount(), 2); EXPECT_EQ(data.useCount(), 2); ememory::SharedPtr dataChildStatic = ememory::staticPointerCast(data); EXPECT_EQ(dataChild.useCount(), 3); EXPECT_EQ(data.useCount(), 3); EXPECT_EQ(dataChildStatic.useCount(), 3); ememory::SharedPtr dataChildDynamic = ememory::dynamicPointerCast(data); EXPECT_EQ(dataChild.useCount(), 4); EXPECT_EQ(data.useCount(), 4); EXPECT_EQ(dataChildStatic.useCount(), 4); EXPECT_EQ(dataChildDynamic.useCount(), 4); ememory::SharedPtr dataChildReinterpret = ememory::reinterpretPointerCast(data); EXPECT_EQ(dataChild.useCount(), 5); EXPECT_EQ(data.useCount(), 5); EXPECT_EQ(dataChildStatic.useCount(), 5); EXPECT_EQ(dataChildDynamic.useCount(), 5); EXPECT_EQ(dataChildReinterpret.useCount(), 5); }