73{
74 unsigned int nbok = 0;
75 unsigned int nb = 0;
77
78 trace.
beginBlock (
"An invalid CountedPtrOrPtr does not create any instance." );
79 {
81 }
82 ++nb; nbok += A::nb == 0 ? 1 : 0;
83 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 0" << std::endl;
85
86 trace.
beginBlock (
"A CountedPtrOrPtr can be used as a simple pointer on an object without acquiring it." );
87 {
88 A a( 17 );
89 ++nb; nbok += A::nb == 1 ? 1 : 0;
90 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 1" << std::endl;
91 {
93 ++nb; nbok += A::nb == 1 ? 1 : 0;
94 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 1" << std::endl;
95 ++nb; nbok += cptr.isSimple() ? 1 : 0;
96 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.isSimple()" << std::endl;
97 }
98 ++nb; nbok += A::nb == 1 ? 1 : 0;
99 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 1" << std::endl;
100 }
101 ++nb; nbok += A::nb == 0 ? 1 : 0;
102 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 0" << std::endl;
104
105 trace.
beginBlock (
"CountedPtrOrPtr can be used as a smart pointer with acquisition and automatic deallocation." );
106 {
108 ++nb; nbok += A::nb == 1 ? 1 : 0;
109 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 1" << std::endl;
110 ++nb; nbok += cptr.isSmart() ? 1 : 0;
111 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.isSmart()" << std::endl;
112 }
113 ++nb; nbok += A::nb == 0 ? 1 : 0;
114 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 0" << std::endl;
116
117 trace.
beginBlock (
"CountedPtrOrPtr can be initialized with = CountedPtrOrPtr<A>( pointer )." );
118 {
120 ++nb; nbok += A::nb == 1 ? 1 : 0;
121 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 1" << std::endl;
122 ++nb; nbok += cptr.
isSmart() ? 1 : 0;
123 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.isSmart()" << std::endl;
124 }
125 ++nb; nbok += A::nb == 0 ? 1 : 0;
126 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 0" << std::endl;
128
129 trace.
beginBlock (
"CountedPtrOrPtr can be initialized with = CountedPtr<A>( pointer )." );
130 {
132 ++nb; nbok += A::nb == 1 ? 1 : 0;
133 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 1" << std::endl;
134 ++nb; nbok += cptr.
isSmart() ? 1 : 0;
135 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.isSmart()" << std::endl;
136 }
137 ++nb; nbok += A::nb == 0 ? 1 : 0;
138 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 0" << std::endl;
140
142 {
145 ++nb; nbok += A::nb == 1 ? 1 : 0;
146 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 1" << std::endl;
147 ++nb; nbok += cptr.
get() == cptr2.
get() ? 1 : 0;
148 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.get() == cptr2.get()" << std::endl;
149 ++nb; nbok += cptr.
count() == 2 ? 1 : 0;
150 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.count() == 2" << std::endl;
151 ++nb; nbok += cptr2.
count() == 2 ? 1 : 0;
152 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr2.count() == 2" << std::endl;
153 }
154 ++nb; nbok += A::nb == 0 ? 1 : 0;
155 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 0" << std::endl;
157
158 trace.
beginBlock (
"CountedPtrOrPtr allows to share objects with CountedPtr." );
159 {
162 ++nb; nbok += A::nb == 1 ? 1 : 0;
163 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 1" << std::endl;
164 ++nb; nbok += cptr.
get() == cptr2.
get() ? 1 : 0;
165 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.get() == cptr2.get()" << std::endl;
166 ++nb; nbok += cptr.
count() == 2 ? 1 : 0;
167 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.count() == 2" << std::endl;
168 ++nb; nbok += cptr2.
count() == 2 ? 1 : 0;
169 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr2.count() == 2" << std::endl;
170 }
171 ++nb; nbok += A::nb == 0 ? 1 : 0;
172 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 0" << std::endl;
174
176 {
179 ++nb; nbok += A::nb == 2 ? 1 : 0;
180 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 2" << std::endl;
181 ++nb; nbok += cptr.
get() != cptr2.
get() ? 1 : 0;
182 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.get() != cptr2.get()" << std::endl;
183 cptr = cptr2;
184 ++nb; nbok += A::nb == 1 ? 1 : 0;
185 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 1" << std::endl;
186 ++nb; nbok += cptr.
get()->a == 12 ? 1 : 0;
187 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.get()->a == 12" << std::endl;
188 ++nb; nbok += cptr.
get() == cptr2.
get() ? 1 : 0;
189 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.get() == cptr2.get()" << std::endl;
190 ++nb; nbok += cptr.
count() == 2 ? 1 : 0;
191 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.count() == 2" << std::endl;
192 ++nb; nbok += cptr2.
count() == 2 ? 1 : 0;
193 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr2.count() == 2" << std::endl;
194 }
195 ++nb; nbok += A::nb == 0 ? 1 : 0;
196 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 0" << std::endl;
198
199 trace.
beginBlock (
"CountedPtrOrPtr and CountedPtr are smart wrt assignment." );
200 {
203 ++nb; nbok += A::nb == 2 ? 1 : 0;
204 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 2" << std::endl;
205 ++nb; nbok += cptr.
get() != cptr2.
get() ? 1 : 0;
206 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.get() != cptr2.get()" << std::endl;
207 cptr = cptr2;
208 ++nb; nbok += A::nb == 1 ? 1 : 0;
209 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 1" << std::endl;
210 ++nb; nbok += cptr.
get()->a == 12 ? 1 : 0;
211 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.get()->a == 12" << std::endl;
212 ++nb; nbok += cptr.
get() == cptr2.
get() ? 1 : 0;
213 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.get() == cptr2.get()" << std::endl;
215 ++nb; nbok += cptr.
get()->a == 5 ? 1 : 0;
216 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.get()->a == 5" << std::endl;
217 ++nb; nbok += cptr.
count() == 2 ? 1 : 0;
218 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr.count() == 2" << std::endl;
219 ++nb; nbok += cptr2.
count() == 2 ? 1 : 0;
220 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"cptr2.count() == 2" << std::endl;
221 }
222 ++nb; nbok += A::nb == 0 ? 1 : 0;
223 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") " <<
"A::nb == 0" << std::endl;
225
227 return nb == nbok;
228}
Aim: Smart or simple pointer on T. It can be a smart pointer based on reference counts or a simple po...
unsigned int count() const
Aim: Smart pointer based on reference counts.