#include #include "v8tree/instance.h" #include "v8dataModel/BasicPartInstance.h" #include "v8datamodel/PartInstance.h" #include "v8dataModel/Tool.h" extern const char* const sInstanceTest; class InstanceTest : public RBX::DescribedCreatable { }; const char* const sInstanceTest = "InstanceTest"; RBX_REGISTER_CLASS(InstanceTest); BOOST_AUTO_TEST_SUITE(Instance) BOOST_AUTO_TEST_CASE(Clone) { int count = RBX::Diagnostics::Countable::getCount(); { boost::shared_ptr i = RBX::Creatable::create(); i->clone(RBX::ScriptingCreator); } BOOST_CHECK_EQUAL(count, RBX::Diagnostics::Countable::getCount()); } BOOST_AUTO_TEST_CASE(PerfDynamicCast) { shared_ptr part = RBX::Creatable::create(); RBX::Instance* inst = part.get(); for (int i=0; i<1000000; ++i) { dynamic_cast(inst); } } BOOST_AUTO_TEST_CASE(PerfIsA) { shared_ptr part = RBX::Creatable::create(); RBX::Instance* inst = part.get(); for (int i=0; i<1000000; ++i) { inst->getDescriptor().isA(RBX::PartInstance::classDescriptor()); } } BOOST_AUTO_TEST_CASE(PerfIsAFalse) { boost::shared_ptr part = RBX::Creatable::create(); RBX::Instance* inst = part.get(); for (int i=0; i<1000000; ++i) { inst->isA(); } } BOOST_AUTO_TEST_CASE(PerfIsATool) { shared_ptr part = RBX::Creatable::create(); RBX::Instance* inst = part.get(); for (int i=0; i<1000000; ++i) { inst->isA(); } } BOOST_AUTO_TEST_CASE(CastTo) { shared_ptr part = RBX::Creatable::create(); shared_ptr instance = RBX::Creatable::create(); BOOST_CHECK(RBX::Instance::fastDynamicCast(part.get())); BOOST_CHECK(!RBX::Instance::fastDynamicCast(instance.get())); RBX::Instance* nullInstance = NULL; BOOST_CHECK(!RBX::Instance::fastDynamicCast(nullInstance)); RBX::Instance* inst = part.get(); BOOST_CHECK(inst->fastDynamicCast()); BOOST_CHECK(!instance->fastDynamicCast()); } BOOST_AUTO_TEST_CASE(CastToConst) { shared_ptr part = RBX::Creatable::create(); shared_ptr instance = RBX::Creatable::create(); BOOST_CHECK(RBX::Instance::fastDynamicCast(part.get())); BOOST_CHECK(!RBX::Instance::fastDynamicCast(instance.get())); const RBX::Instance* nullInstance = NULL; BOOST_CHECK(!RBX::Instance::fastDynamicCast(nullInstance)); const RBX::Instance* inst = part.get(); BOOST_CHECK(inst->fastDynamicCast()); BOOST_CHECK(!instance->fastDynamicCast()); } BOOST_AUTO_TEST_CASE(SharedCastTo) { shared_ptr part = RBX::Creatable::create(); shared_ptr instance = RBX::Creatable::create(); BOOST_CHECK(RBX::Instance::fastSharedDynamicCast(part)); BOOST_CHECK(!RBX::Instance::fastSharedDynamicCast(instance)); shared_ptr nullInstance; BOOST_CHECK(!RBX::Instance::fastSharedDynamicCast(nullInstance)); } BOOST_AUTO_TEST_SUITE_END()