DGtal 1.3.0
Loading...
Searching...
No Matches
Functions
testCountedPtr.cpp File Reference
#include <iostream>
#include "DGtal/base/Common.h"
#include "DGtal/base/CountedPtr.h"

Go to the source code of this file.

Functions

bool testCountedPtr ()
 
bool testCountedPtrCopy ()
 
bool testCountedPtrMemory ()
 
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
David Coeurjolly (david.nosp@m..coe.nosp@m.urjol.nosp@m.ly@l.nosp@m.iris..nosp@m.cnrs.nosp@m..fr ) Laboratoire d'InfoRmatique en Image et Systèmes d'information - LIRIS (CNRS, UMR 5205), CNRS, France
Jacques-Olivier Lachaud (jacqu.nosp@m.es-o.nosp@m.livie.nosp@m.r.la.nosp@m.chaud.nosp@m.@uni.nosp@m.v-sav.nosp@m.oie..nosp@m.fr ) Laboratory of Mathematics (CNRS, UMR 5807), University of Savoie, France
Date
2012/05/31

Functions for testing class CountedPtr.

This file is part of the DGtal library.

Definition in file testCountedPtr.cpp.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 218 of file testCountedPtr.cpp.

219{
220 trace.beginBlock ( "Testing class CountedPtr" );
221 trace.info() << "Args:";
222 for ( int i = 0; i < argc; ++i )
223 trace.info() << " " << argv[ i ];
224 trace.info() << endl;
225
226 bool res = testCountedPtr()
229 trace.emphase() << ( res ? "Passed." : "Error." ) << endl;
230 trace.endBlock();
231 return res ? 0 : 1;
232}
void beginBlock(const std::string &keyword="")
std::ostream & emphase()
std::ostream & info()
double endBlock()
Trace trace
Definition: Common.h:154
bool testCountedPtr()
bool testCountedPtrMemory()
bool testCountedPtrCopy()

References DGtal::Trace::beginBlock(), DGtal::Trace::emphase(), DGtal::Trace::endBlock(), DGtal::Trace::info(), testCountedPtr(), testCountedPtrCopy(), testCountedPtrMemory(), and DGtal::trace.

◆ testCountedPtr()

bool testCountedPtr ( )

Example of a test. To be completed.

Definition at line 48 of file testCountedPtr.cpp.

49{
50 unsigned int nbok = 0;
51 unsigned int nb = 0;
52
53 trace.beginBlock ( "Testing CountedPtr ..." );
54
55 int *value=new int(5);
56 CountedPtr<int> p( value );
57 nbok += p.unique() ? 1 : 0;
58 nb++;
59 trace.info() << p << " value=" << *p<< std::endl;
60 trace.info() << "(" << nbok << "/" << nb << ") "
61 << "unique" << std::endl;
62
63 *p = 6;
64 trace.info() << p << " value=" << *p<< std::endl;
65 nbok += p.unique() ? 1 : 0;
66 nb++;
67 trace.info() << "(" << nbok << "/" << nb << ") "
68 << "unique" << std::endl;
69
71
72 return nbok == nb;
73}
Aim: Smart pointer based on reference counts.
Definition: CountedPtr.h:80

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

Referenced by main().

◆ testCountedPtrCopy()

bool testCountedPtrCopy ( )

Definition at line 76 of file testCountedPtr.cpp.

77{
78 unsigned int nbok = 0;
79 unsigned int nb = 0;
80
81 trace.beginBlock ( "Testing CountedPtr copy..." );
82
83 int *value= new int(5);
84 CountedPtr<int> p( value );
85 nbok += p.unique() ? 1 : 0;
86 nb++;
87 trace.info() << p <<std::endl;
88 trace.info() << "(" << nbok << "/" << nb << ") "
89 << "unique" << std::endl;
90
91 CountedPtr<int> q ( p );
92
93 nbok += p.unique() ? 0: 1;
94 nb++;
95 trace.info() << p <<std::endl;
96 trace.info() << q<<std::endl;
97 trace.info() << "(" << nbok << "/" << nb << ") "
98 << "not unique anymore" << std::endl;
99
100
101 trace.endBlock();
102
103 return nbok == nb;
104}

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

Referenced by main().

◆ testCountedPtrMemory()

bool testCountedPtrMemory ( )

Definition at line 135 of file testCountedPtr.cpp.

136{
137 unsigned int nbok = 0;
138 unsigned int nb = 0;
139 trace.beginBlock ( "Testing CountedPtr memory managment..." );
140
141 trace.beginBlock ( "An invalid CountedPtr does not create any instance." );
142 {
143 CountedPtr<A> cptr;
144 }
145 ++nb; nbok += A::nb == 0 ? 1 : 0;
146 trace.info() << "(" << nbok << "/" << nb << ") " << "A::nb == 0" << std::endl;
147 trace.endBlock();
148
149 trace.beginBlock ( "CountedPtr can be used as a simple pointer with automatic deallocation." );
150 {
151 CountedPtr<A> cptr( new A( 10 ) );
152 ++nb; nbok += A::nb == 1 ? 1 : 0;
153 trace.info() << "(" << nbok << "/" << nb << ") " << "A::nb == 1" << std::endl;
154 }
155 ++nb; nbok += A::nb == 0 ? 1 : 0;
156 trace.info() << "(" << nbok << "/" << nb << ") " << "A::nb == 0" << std::endl;
157 trace.endBlock();
158
159 trace.beginBlock ( "CountedPtr can be initialized with = CountedPtr<A>( pointer )." );
160 {
161 CountedPtr<A> cptr = CountedPtr<A>( new A( 5 ) );
162 ++nb; nbok += A::nb == 1 ? 1 : 0;
163 trace.info() << "(" << nbok << "/" << nb << ") " << "A::nb == 1" << std::endl;
164 }
165 ++nb; nbok += A::nb == 0 ? 1 : 0;
166 trace.info() << "(" << nbok << "/" << nb << ") " << "A::nb == 0" << std::endl;
167 trace.endBlock();
168
169 trace.beginBlock ( "CountedPtr allows to share objects." );
170 {
171 CountedPtr<A> cptr( new A( 7 ) );
172 CountedPtr<A> cptr2 = cptr;
173 ++nb; nbok += A::nb == 1 ? 1 : 0;
174 trace.info() << "(" << nbok << "/" << nb << ") " << "A::nb == 1" << std::endl;
175 ++nb; nbok += cptr.get() == cptr2.get() ? 1 : 0;
176 trace.info() << "(" << nbok << "/" << nb << ") " << "cptr.get() == cptr2.get()" << std::endl;
177 ++nb; nbok += cptr.count() == 2 ? 1 : 0;
178 trace.info() << "(" << nbok << "/" << nb << ") " << "cptr.count() == 2" << std::endl;
179 ++nb; nbok += cptr2.count() == 2 ? 1 : 0;
180 trace.info() << "(" << nbok << "/" << nb << ") " << "cptr2.count() == 2" << std::endl;
181 }
182 ++nb; nbok += A::nb == 0 ? 1 : 0;
183 trace.info() << "(" << nbok << "/" << nb << ") " << "A::nb == 0" << std::endl;
184 trace.endBlock();
185
186 trace.beginBlock ( "CountedPtr are smart wrt assignment." );
187 {
188 CountedPtr<A> cptr( new A( 3 ) );
189 CountedPtr<A> cptr2( new A( 12 ) );
190 ++nb; nbok += A::nb == 2 ? 1 : 0;
191 trace.info() << "(" << nbok << "/" << nb << ") " << "A::nb == 2" << std::endl;
192 ++nb; nbok += cptr.get() != cptr2.get() ? 1 : 0;
193 trace.info() << "(" << nbok << "/" << nb << ") " << "cptr.get() != cptr2.get()" << std::endl;
194 cptr = cptr2;
195 ++nb; nbok += A::nb == 1 ? 1 : 0;
196 trace.info() << "(" << nbok << "/" << nb << ") " << "A::nb == 1" << std::endl;
197 ++nb; nbok += cptr.get()->a == 12 ? 1 : 0;
198 trace.info() << "(" << nbok << "/" << nb << ") " << "cptr.get()->a == 12" << std::endl;
199 ++nb; nbok += cptr.get() == cptr2.get() ? 1 : 0;
200 trace.info() << "(" << nbok << "/" << nb << ") " << "cptr.get() == cptr2.get()" << std::endl;
201 ++nb; nbok += cptr.count() == 2 ? 1 : 0;
202 trace.info() << "(" << nbok << "/" << nb << ") " << "cptr.count() == 2" << std::endl;
203 ++nb; nbok += cptr2.count() == 2 ? 1 : 0;
204 trace.info() << "(" << nbok << "/" << nb << ") " << "cptr2.count() == 2" << std::endl;
205 }
206 ++nb; nbok += A::nb == 0 ? 1 : 0;
207 trace.info() << "(" << nbok << "/" << nb << ") " << "A::nb == 0" << std::endl;
208 trace.endBlock();
209
210 trace.endBlock();
211 return nb == nbok;
212}
T * get() const noexcept
Definition: CountedPtr.h:195
unsigned int count() const
Definition: CountedPtr.h:236

References DGtal::Trace::beginBlock(), DGtal::CountedPtr< T >::count(), DGtal::Trace::endBlock(), DGtal::CountedPtr< T >::get(), DGtal::Trace::info(), and DGtal::trace.

Referenced by main().