#include "EngineTest.h" #include "MinimalEngine.h" #define BOOST_TEST_MODULE SeeleEngine #include //#include using namespace Seele; Seele::GlobalFixture::~GlobalFixture() { //getGlobalThreadPool().waitIdle(); } 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); } } 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) { Seele::UniquePtr uptr = new TestStruct(); Seele::UniquePtr uptr2 = std::move(uptr); BOOST_REQUIRE_EQUAL(uptr2->data, 10); BOOST_REQUIRE_EQUAL(uptr.isValid(), false); } struct ThisReference { ThisReference() { } ~ThisReference() { data = 12; } Seele::RefPtr getRef() { return this; } uint32 data = 1; }; BOOST_AUTO_TEST_CASE(this_reference) { Seele::RefPtr ptr2; { Seele::RefPtr ptr = new ThisReference(); BOOST_REQUIRE_EQUAL(ptr->data, 1); ptr2 = ptr->getRef(); BOOST_REQUIRE_EQUAL(ptr2->data, 1); ptr2->data = 5; BOOST_REQUIRE_EQUAL(ptr->data, 5); } BOOST_REQUIRE_EQUAL(ptr2->data, 5); } BOOST_AUTO_TEST_SUITE_END()