32 #include "DGtal/base/Common.h"
33 #include "DGtal/base/OwningOrAliasingPtr.h"
37 using namespace DGtal;
43 template<
typename Ptr,
typename Value>
44 bool testAccessOperators(
const Ptr& aPtr,
const Value& aValue)
46 return ( (aPtr.operator->() == aPtr.get()) && (*aPtr == aValue) );
49 template<
typename Ptr>
50 bool testCopyAndAssignement(
const Ptr& aPtr)
59 return ( ( (p1.get() != aPtr.get()) && (*p1 == *aPtr) )
60 && ( (p2.get() != aPtr.get()) && (*p2 != *aPtr) )
61 && ( (p3.get() != aPtr.get()) && (*p3 == *aPtr) ) );
65 return ( ( (p1.get() == aPtr.get()) && (*p1 == *aPtr) )
66 && ( (p2.get() != aPtr.get()) && (*p2 != *aPtr) )
67 && ( (p3.get() == aPtr.get()) && (*p3 == *aPtr) ) );
75 bool testOwningOrAliasingPtr()
77 unsigned int nbok = 0;
89 if ( (owningPtr.isOwning()) && (owningPtr.get() != &i) && (owningPtr.isValid()) )
92 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << std::endl;
93 if ( testAccessOperators(owningPtr, i) )
96 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << std::endl;
97 if ( testCopyAndAssignement(owningPtr) )
100 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << std::endl;
110 if ( (owningPtr2.isOwning()) && (owningPtr2.get() != &i) && (owningPtr2.isValid()) )
113 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << std::endl;
114 if ( testAccessOperators(owningPtr2, *owningPtr2) )
117 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << std::endl;
118 if ( testCopyAndAssignement(owningPtr2) )
121 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << std::endl;
130 trace.
info() << aliasingPtr << std::endl;
131 if ( (!aliasingPtr.isOwning()) && (aliasingPtr.get() == &i) && (aliasingPtr.isValid()) )
134 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << std::endl;
135 if ( testAccessOperators(owningPtr, i) )
138 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << std::endl;
139 if ( testCopyAndAssignement(owningPtr) )
142 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " << std::endl;
203 int main(
int argc,
char** argv )
207 for (
int i = 0; i < argc; ++i )
211 bool res = testOwningOrAliasingPtr() && basicUsage();
212 trace.
emphase() << ( res ?
"Passed." :
"Error." ) << endl;