DGtal  1.4.beta
testOwningOrAliasingPtr.cpp File Reference
#include <iostream>
#include "DGtal/base/Common.h"
#include "DGtal/base/OwningOrAliasingPtr.h"
Include dependency graph for testOwningOrAliasingPtr.cpp:

Go to the source code of this file.

Functions

template<typename Ptr , typename Value >
bool testAccessOperators (const Ptr &aPtr, const Value &aValue)
 
template<typename Ptr >
bool testCopyAndAssignement (const Ptr &aPtr)
 
bool testOwningOrAliasingPtr ()
 
bool basicUsage ()
 
int main (int argc, char **argv)
 

Detailed Description

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author
Tristan Roussillon (trist.nosp@m.an.r.nosp@m.oussi.nosp@m.llon.nosp@m.@liri.nosp@m.s.cn.nosp@m.rs.fr ) Laboratoire d'InfoRmatique en Image et Systèmes d'information - LIRIS (CNRS, UMR 5205), CNRS, France
Date
2012/11/14

Functions for testing class OwningOrAliasingPtr.

This file is part of the DGtal library.

Definition in file testOwningOrAliasingPtr.cpp.

Function Documentation

◆ basicUsage()

bool basicUsage ( )

Basic usage

Examples
geometry/tools/determinant/exampleInHalfPlane.cpp.

Definition at line 180 of file testOwningOrAliasingPtr.cpp.

181 {
182  trace.beginBlock ( "Basic usage ..." );
183 
184  //1) existing or default-constructed object
185  int obj = 5;
186  Dummy1<int> d1; //default-constructed
187  Dummy1<int> d2(&obj); //construction from an existing object
188 
189  //2) choice with/without copy
190  int smallObj = 5;
191  Dummy2<int> d3(smallObj); //small object copied
192  DummyBigObject bigObj;
193  Dummy2<DummyBigObject> d4(&bigObj); //big object not copied
194 
195  trace.endBlock();
196 
197  return true;
198 }
void beginBlock(const std::string &keyword="")
double endBlock()
Trace trace
Definition: Common.h:153

References DGtal::Trace::beginBlock(), DGtal::Trace::endBlock(), and DGtal::trace.

Referenced by main().

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 203 of file testOwningOrAliasingPtr.cpp.

204 {
205  trace.beginBlock ( "Testing class OwningOrAliasingPtr" );
206  trace.info() << "Args:";
207  for ( int i = 0; i < argc; ++i )
208  trace.info() << " " << argv[ i ];
209  trace.info() << endl;
210 
211  bool res = testOwningOrAliasingPtr() && basicUsage();
212  trace.emphase() << ( res ? "Passed." : "Error." ) << endl;
213  trace.endBlock();
214  return res ? 0 : 1;
215 }
std::ostream & emphase()
std::ostream & info()
bool basicUsage()
bool testOwningOrAliasingPtr()

References basicUsage(), DGtal::Trace::beginBlock(), DGtal::Trace::emphase(), DGtal::Trace::endBlock(), DGtal::Trace::info(), testOwningOrAliasingPtr(), and DGtal::trace.

◆ testAccessOperators()

template<typename Ptr , typename Value >
bool testAccessOperators ( const Ptr &  aPtr,
const Value aValue 
)

Definition at line 44 of file testOwningOrAliasingPtr.cpp.

45 {
46  return ( (aPtr.operator->() == aPtr.get()) && (*aPtr == aValue) );
47 }

Referenced by testOwningOrAliasingPtr().

◆ testCopyAndAssignement()

template<typename Ptr >
bool testCopyAndAssignement ( const Ptr &  aPtr)

Definition at line 50 of file testOwningOrAliasingPtr.cpp.

51 {
52  Ptr p1(aPtr); //copy
53  Ptr p2(0); //construction
54  Ptr p3 = p2; //copy
55  p3 = aPtr; //assignement
56 
57  if (aPtr.isOwning())
58  {
59  return ( ( (p1.get() != aPtr.get()) && (*p1 == *aPtr) )
60  && ( (p2.get() != aPtr.get()) && (*p2 != *aPtr) )
61  && ( (p3.get() != aPtr.get()) && (*p3 == *aPtr) ) );
62  }
63  else
64  {
65  return ( ( (p1.get() == aPtr.get()) && (*p1 == *aPtr) )
66  && ( (p2.get() != aPtr.get()) && (*p2 != *aPtr) )
67  && ( (p3.get() == aPtr.get()) && (*p3 == *aPtr) ) );
68  }
69 }

Referenced by testOwningOrAliasingPtr().

◆ testOwningOrAliasingPtr()

bool testOwningOrAliasingPtr ( )

Unit tests

Definition at line 75 of file testOwningOrAliasingPtr.cpp.

76 {
77  unsigned int nbok = 0;
78  unsigned int nb = 0;
79 
80 
81  int i = 10;
82 
84 
85  trace.beginBlock ( "Owning pointer (1/2)..." );
86 
87  OwningOrAliasingPtr<int> owningPtr(i);
88  trace.info() << owningPtr << std::endl;
89  if ( (owningPtr.isOwning()) && (owningPtr.get() != &i) && (owningPtr.isValid()) )
90  nbok++;
91  nb++;
92  trace.info() << "(" << nbok << "/" << nb << ") " << std::endl;
93  if ( testAccessOperators(owningPtr, i) )
94  nbok++;
95  nb++;
96  trace.info() << "(" << nbok << "/" << nb << ") " << std::endl;
97  if ( testCopyAndAssignement(owningPtr) )
98  nbok++;
99  nb++;
100  trace.info() << "(" << nbok << "/" << nb << ") " << std::endl;
101 
102  trace.endBlock();
103 
105 
106  trace.beginBlock ( "Owning pointer (2/2)..." );
107 
108  OwningOrAliasingPtr<int> owningPtr2(new int(10), true);
109  trace.info() << owningPtr2 << std::endl;
110  if ( (owningPtr2.isOwning()) && (owningPtr2.get() != &i) && (owningPtr2.isValid()) )
111  nbok++;
112  nb++;
113  trace.info() << "(" << nbok << "/" << nb << ") " << std::endl;
114  if ( testAccessOperators(owningPtr2, *owningPtr2) )
115  nbok++;
116  nb++;
117  trace.info() << "(" << nbok << "/" << nb << ") " << std::endl;
118  if ( testCopyAndAssignement(owningPtr2) )
119  nbok++;
120  nb++;
121  trace.info() << "(" << nbok << "/" << nb << ") " << std::endl;
122 
123  trace.endBlock();
124 
126 
127  trace.beginBlock ( "Aliasing pointer ..." );
128 
129  OwningOrAliasingPtr<int> aliasingPtr(&i);
130  trace.info() << aliasingPtr << std::endl;
131  if ( (!aliasingPtr.isOwning()) && (aliasingPtr.get() == &i) && (aliasingPtr.isValid()) )
132  nbok++;
133  nb++;
134  trace.info() << "(" << nbok << "/" << nb << ") " << std::endl;
135  if ( testAccessOperators(owningPtr, i) )
136  nbok++;
137  nb++;
138  trace.info() << "(" << nbok << "/" << nb << ") " << std::endl;
139  if ( testCopyAndAssignement(owningPtr) )
140  nbok++;
141  nb++;
142  trace.info() << "(" << nbok << "/" << nb << ") " << std::endl;
143 
144  trace.endBlock();
145 
146 
147  //conlusion
148  return nbok == nb;
149 }
Aim: This class describes a smart pointer that is, given the constructor called by the user,...
bool testAccessOperators(const Ptr &aPtr, const Value &aValue)
bool testCopyAndAssignement(const Ptr &aPtr)

References DGtal::Trace::beginBlock(), DGtal::Trace::endBlock(), DGtal::OwningOrAliasingPtr< T >::get(), DGtal::Trace::info(), DGtal::OwningOrAliasingPtr< T >::isOwning(), DGtal::OwningOrAliasingPtr< T >::isValid(), testAccessOperators(), testCopyAndAssignement(), and DGtal::trace.

Referenced by main().