#include "EngineTest.h" #include "MinimalEngine.h" #define BOOST_TEST_MODULE SeeleEngine #define BOOST_TEST_DYN_LINK #include using namespace Seele; BOOST_TEST_GLOBAL_FIXTURE(GlobalFixture); BOOST_AUTO_TEST_SUITE(RefPtr) struct TestStruct { TestStruct() : data(10) { } virtual ~TestStruct() { data = 15; } uint32 data; }; struct DeclStruct; BOOST_AUTO_TEST_CASE(basic_refcount) { { Seele::RefPtr ptr = new TestStruct(); BOOST_REQUIRE_EQUAL(ptr->data, 10); { Seele::RefPtr secondPtr = ptr; BOOST_REQUIRE_EQUAL(secondPtr->data, 10); BOOST_REQUIRE_EQUAL(ptr->data, 10); } BOOST_REQUIRE_EQUAL(ptr->data, 10); } std::shared_ptr test; } struct DeclStruct { ~DeclStruct() { data = 10; } uint32 data = 20; }; struct DerivedStruct : public TestStruct { DerivedStruct() :data2(20) { } ~DerivedStruct() { data2 = 30; } uint32 data2; }; BOOST_AUTO_TEST_CASE(inheritance_cast) { Seele::RefPtr backCast; { Seele::RefPtr derived = new DerivedStruct(); Seele::RefPtr base = derived; BOOST_REQUIRE_EQUAL(base->data, 10); backCast = base.cast(); BOOST_REQUIRE_EQUAL(backCast->data, 10); BOOST_REQUIRE_EQUAL(backCast->data2, 20); } BOOST_REQUIRE_EQUAL(backCast->data, 10); BOOST_REQUIRE_EQUAL(backCast->data2, 20); } BOOST_AUTO_TEST_CASE(unique_ptr) { UniquePtr uptr = new TestStruct(); UniquePtr uptr2 = std::move(uptr); BOOST_REQUIRE_EQUAL(uptr2->data, 10); BOOST_REQUIRE_EQUAL(uptr.isValid(), false); } BOOST_AUTO_TEST_SUITE_END()