Ptr_UnitTests.cpp

Go to the documentation of this file.
00001 #include "Teuchos_UnitTestHarness.hpp"
00002 #include "Teuchos_Ptr.hpp"
00003 #include "Teuchos_getConst.hpp"
00004 #include "TestClasses.hpp"
00005 
00006 
00007 namespace {
00008 
00009 
00010 using Teuchos::null;
00011 using Teuchos::Ptr;
00012 using Teuchos::RCP;
00013 using Teuchos::rcp;
00014 using Teuchos::ptrFromRef;
00015 using Teuchos::rcpFromPtr;
00016 using Teuchos::NullReferenceError;
00017 using Teuchos::DanglingReferenceError;
00018 using Teuchos::RCP_STRONG;
00019 using Teuchos::RCP_WEAK;
00020 using Teuchos::RCP_STRENGTH_INVALID;
00021 
00022 
00023 TEUCHOS_UNIT_TEST( Ptr, nonnull )
00024 {
00025   ECHO(A a);
00026   ECHO(Ptr<A> a_ptr = ptrFromRef(a));
00027   TEST_EQUALITY_CONST(is_null(a_ptr), false);
00028   TEST_EQUALITY_CONST(nonnull(a_ptr), true);
00029   ECHO(a_ptr = null);
00030   TEST_EQUALITY_CONST(is_null(a_ptr), true);
00031   TEST_EQUALITY_CONST(nonnull(a_ptr), false);
00032 }
00033 
00034 
00035 TEUCHOS_UNIT_TEST( Ptr, getConst )
00036 {
00037   RCP<A> a_rcp(new A);
00038   Ptr<A> a_ptr = a_rcp.ptr();
00039   Ptr<const A> ca_ptr = a_ptr.getConst();
00040   TEST_EQUALITY(a_ptr.getRawPtr(), ca_ptr.getRawPtr());
00041 }
00042 
00043 
00044 TEUCHOS_UNIT_TEST( Ptr, rcpFromPtr_weakRef )
00045 {
00046   ECHO(RCP<A> a_rcp = rcp(new A));
00047   ECHO(Ptr<A> a_ptr = a_rcp.ptr());
00048   ECHO(RCP<A> a_rcp2 = rcpFromPtr(a_ptr));
00049   TEST_EQUALITY(a_rcp2.getRawPtr(), a_rcp.getRawPtr());
00050 #ifdef TEUCHOS_DEBUG
00051   TEST_ASSERT(a_rcp2.shares_resource(a_rcp));
00052 #else
00053   // In an optimized build, the object a_rcp2 has its own RCPNode object that
00054   // is unrelated to the orgininal a_rcp object.  This cuts down on overhead.
00055 #endif
00056   ECHO(a_rcp = null);
00057 #ifdef TEUCHOS_DEBUG
00058   TEST_THROW(a_ptr.getRawPtr(), DanglingReferenceError);
00059   TEST_THROW(a_rcp2.getRawPtr(), DanglingReferenceError);
00060 #endif
00061   
00062 }
00063 
00064 
00065 TEUCHOS_UNIT_TEST( Ptr, rcpFromPtr_rawRef )
00066 {
00067   ECHO(A a);
00068   ECHO(Ptr<A> a_ptr = ptrFromRef(a));
00069   ECHO(RCP<A> a_rcp2 = rcpFromPtr(a_ptr));
00070   TEST_EQUALITY(a_rcp2.getRawPtr(), &a);
00071 }
00072 
00073 
00074 TEUCHOS_UNIT_TEST( Ptr, rcpFromPtr_null )
00075 {
00076   ECHO(Ptr<A> a_ptr);
00077   ECHO(RCP<A> a_rcp2 = rcpFromPtr(a_ptr));
00078   TEST_EQUALITY(a_rcp2, null);
00079 }
00080 
00081 
00082 } // namespace
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Generated on Wed Apr 13 09:57:28 2011 for Teuchos Package Browser (Single Doxygen Collection) by  doxygen 1.6.3